我意识到如果我的所有值都是固定宽度,则建议使用 CHAR。但是,那又怎样?为了安全起见,为什么不为所有文本字段选择 VARCHAR。
一般规则是如果所有行的长度 都接近,则选择 CHAR* 。 当长度变化 很大时选择 VARCHAR (或 NVARCHAR )。CHAR 也可能会快一点,因为所有行的长度都相同。 __ *
它因数据库实现而异,但通常 VARCHAR (或 NVARCHAR )除了实际数据外,还使用一两个字节的存储空间(用于长度或终止)。因此(假设您使用的是单字节字符集)存储单词“FooBar”
底线是对于长度相对相同的数据(在两个字符长度差内), CHAR 可以 更快 、更 节省空间。
注意 :Microsoft SQL 对 VARCHAR 有 2 个字节的开销。这可能因数据库而异,但通常至少需要 1 字节的开销来指示 VARCHAR 上的长度或 EOL。
正如Gaven 在评论中指出的那样:当涉及到多字节字符集时,情况会发生变化,这是 VARCHAR 成为更好选择的情况。
关于声明的 VARCHAR 长度的注释:因为它存储实际内容的长度,所以您不会浪费未使用的长度。 因此,在VARCHAR(6)、VARCHAR(100) _或 VARCHAR(MAX)中存储 6 个字符使用相同的存储量。阅读更多关于使用VARCHAR(MAX)时的差异。您在 VARCHAR 中声明 _最大 大小以限制存储的数量。