我意识到如果我的所有值都是固定宽度的,则建议使用 CHAR。但是,那又怎样?为了安全起见,为什么不为所有文本字段选择 VARCHAR?
一般规则是选择CHAR如果所有行都接近相同长度. Pick VARCHAR (or NVARCHAR) 当。。。的时候长度不同显著地。 CHAR 也可能更快一些,因为所有行的长度都相同。
它因数据库实现而异,但通常是 VARCHAR(或NVARCHAR) 除了实际数据之外,还使用一两个字节以上的存储空间(用于长度或终止)。因此(假设您使用的是单字节字符集)存储单词“FooBar”
-
CHAR(6)= 6 字节(无开销)
-
VARCHAR(100)= 8 字节(2字节开销)
-
CHAR(10)= 10 字节(浪费4个字节)
底线是CHAR can be faster和更多节省空间对于长度相对相同的数据(两个字符长度差之内)。
Note:Microsoft SQL 对于 VARCHAR 有 2 个字节的开销。这可能因数据库而异,但通常,至少需要 1 个字节的开销来指示 VARCHAR 上的长度或 EOL。
正如所指出的Gaven在评论中:事情发生了变化多字节字符集,并且在这种情况下 VARCHAR 成为更好的选择。
关于声明长度的注释VARCHAR:因为它存储了实际内容的长度,所以你不会浪费未使用的长度。所以存储6个字符VARCHAR(6)、VARCHAR(100)、orVARCHAR(最大值)使用相同的存储量。详细了解使用时的差异VARCHAR(最大值)。你声明一个maximumVARCHAR 中的大小来限制存储的数量。
在评论中永远学习指出Microsoft Transact-SQL 文档似乎说相反。我认为这是一个错误,或者至少文档不清楚。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)