我意识到,如果我所有的值都是固定宽度,建议使用CHAR.但是,那又怎样?为安全起见,为什么不为所有文本字段 Select VARCHAR呢.
我意识到,如果我所有的值都是固定宽度,建议使用CHAR.但是,那又怎样?为安全起见,为什么不为所有文本字段 Select VARCHAR呢.
一般的规则是,如果所有行都接近same length,则 Select CHAR.当length varies显著时, Select VARCHAR(或NVARCHAR).CHAR也可能会快一点,因为所有行的长度都相同.
它因DB实现而异,但通常情况下,VARCHAR(或NVARCHAR)除了实际数据之外,还使用一个或两个以上的存储字节(用于长度或终止).所以(假设您使用的是一个单字节字符集)存储单词"FooBar"
对于长度相对相同(在两个字符长度差内)的数据,底线是CHAR can be faster和space-efficient以上.
Note:Microsoft SQL有2字节的VARCHAR开销.这可能因DB而异,但通常,至少需要1字节的开销来指示VARCHAR上的长度或EOL.
正如100在 comments 中指出的那样:当涉及到multi-byte characters组时,情况会发生变化,在这种情况下,VARCHAR成为更好的 Select .
A note about the declared length of the 101:因为它存储了实际内容的长度,所以不会浪费未使用的长度.因此,在VARCHAR(6), VARCHAR(100), or VARCHAR(MAX)中存储6个字符使用相同的存储量.阅读有关使用VARCHAR(MAX)时的差异的更多信息.在VARCHAR中声明maximum大小,以限制存储量.
在 comments 中,AlwaysLearning指出Microsoft Transact-SQL docs的说法似乎正好相反.我认为这是一个错误,或者至少文件不清楚.