代码之家  ›  专栏  ›  技术社区  ›  Tim Schmelter

SQL Server数据类型:将8位无符号数字存储为INT或CHAR(8)?

  •  1
  • Tim Schmelter  · 技术社区  · 14 年前

    我想标题说明了一切。 将8位无符号数字存储为Int或char(8)类型更好(更快,根据内存和磁盘节省空间)?

    背景信息:我想储存 TAC

    谢谢

    4 回复  |  直到 11 年前
        1
  •  2
  •   Oded    14 年前

    如果它是一个数字,请将其存储为一个数字。

    4 bytes ,给他们一个范围:

    所以,适合你的需要。

    char[8] 将存储为 8 bytes ,因此存储量增加了一倍,当然,将来还需要扩展(将近1000万条记录从8个字符转换为9个字符需要时间,可能需要在这段时间内使数据库脱机)。

    int 赢得所有人的支持。


    更新

    储存数字,我想你必须使用 char

    关于未来扩张的问题 烧焦 是固定长度字段,从 char[9] 不会丢失信息。但是,我不确定是否会在右边或左边添加额外的字符(尽管这可能还不确定)。您将不得不测试,一旦字段被扩展,您将需要确保原始数据已被保留。

    字符[9] 字段,迁移所有 字符[8] 字符[8] 字段并将新字段重命名为原始名称。当然,这会破坏表上的所有统计数据(但直接扩展字段也是如此)。

        2
  •  5
  •   Damien_The_Unbeliever    14 年前

    在确定已正确建模数据类型之前,不要开始优化空间。

    编辑

    但为了避免垃圾进入,请确保您也应用了检查约束。E、 如果是8位数,加上

    CONSTRAINT CK_Only8Digits CHECK (not TAC like '%[^0-9]%' and LEN(RTRIM(TAC)) = 8)
    
        3
  •  2
  •   Jay    14 年前

    如果你需要把这些数字分开——搜索所有数字3-4是“02”或类似的数字——char会更简单,可能更快。

    我猜你不是在做算术。你不会把两个TAC加在一起,也不会找到一组记录的平均TAC。如果你是,那将是一个使用int的扣篮式论点。

    如果以上都不适用,那就没什么关系了。我可能会用char。我想不出任何一个有说服力的理由。

        4
  •  1
  •   Adriaan Stander    14 年前

    定义整数(或BIGINT)

    int, bigint, smallint, and tinyint (Transact-SQL)

    来自-2^31的整数(整数)数据 (-2147483648)到2^31-1 字节,

    来自-2^63的bigint(整数)数据 (-9223372036854775808)到 存储大小为8字节。

    char and varchar

    固定长度非Unicode字符 长度为n字节的数据。n必须是 从1到8000的值。保管部 大小为n字节。

    另外,一旦查询到这个,如果使用int与char列相比,性能将降低,因为SQL Server将不得不为您执行as cast。。。