我应该使用什么SQL Server DataType作为Text字段,它将被JOINED,"LIKE'd"和查询很多?

Nat*_*ate 4 sql t-sql sql-server database-design types

标题真的说明了一切,但对于那些打扰点击的人来说更多信息.

  • 字符串的长度通常在2-5个字符之间,可能偶尔超过5个字符,超过10个字符.从不超过10个字符.
  • 会像这样查询:
    • SELECT ... WHERE ... = 'abcd';
    • SELECT ... WHERE ... LIKE 'ab%';
  • 将在表JOINS中使用.

我想知道我是否应该使用nvarchar(10)或char(10)或varchar(10)?对于像我这样的情况,我真的不知道上述的优点和缺点是什么.我感谢您提供的任何意见.

mar*_*c_s 7

CHAR(10)将用空格填充到定义的长度,例如,如果你有CHAR(10)并在其中存储"堆栈",内容将真正是"堆栈.....".适用于州名缩写(总是2个字符).但是填充确实使得查询在某些时候变得更加麻烦.

VARCHAR(10) 将根据需要存储尽可能多的字符 - 更高效,但更大的字符串更多.

NVARCHAR(10)将是相同的 - 可变长度 - 但每个字符有2个字节(并且NCHAR(10)相同CHAR(10)- 每个字符只有2个字节).非常适合需要定期支持亚洲,西里尔或阿拉伯字符或其他"非拉丁"字母表.如果您只有西欧语言(英语,法语,德语,西班牙语等),那就浪费了空间.

我的直觉告诉我,CHAR/NCHAR加入时可能会更快,但我认为这不会是一个显着的差异.否则,如果你必须为每个条目保留10个字符,并且大多数只有2到5个字符,那么你就会浪费一些空间,所以这对于CHAR/NCHAR类型来说是一个缺点.

所以,如果我必须决定,我可能会使用VARCHAR(10)(不知道你所有的详细要求).

  • +1:但实际上,如果你不是必须*,请不要加入基于文本的信息*. (2认同)