我意识到,如果我所有值均为固定宽度,则建议使用CHAR。但是,那又如何呢?为了安全起见,为什么不为所有文本字段选择VARCHAR?
问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
如果所有行的长度接近相同,通常选择CHAR。当长度变化很大时,请选择VARCHAR。由于所有行的长度相同,因此CHAR的速度也可能会更快一些。
它因数据库的实现而异,但是通常VARCHAR除了实际数据外还使用一个或两个以上的字节存储空间(用于长度或终止)。因此(假设您使用的是一个字节的字符集),则存储单词“ FooBar”
CHAR(6)= 6个字节(无开销) VARCHAR(10)= 8个字节(2个字节的开销) CHAR(10)= 10个字节(4个字节的开销) 底线是CHAR可以更快,更节省空间地使用长度相对相同的数据(两个字符之间的长度差)。
注意:Microsoft SQL有2个字节的VARCHAR开销。这可能因数据库而异,但是通常至少需要1个字节的开销来指示VARCHAR上的长度或EOL。
正如Gaven在评论中指出的那样,如果您使用的是多字节可变长度字符集(如UTF8),则CHAR将存储存储字符数所需的最大字节数。因此,如果UTF8最多需要3个字节来存储一个字符,那么即使仅存储latin1个字符,CHAR(6)也将固定为18个字节。因此,在这种情况下,VARCHAR成为更好的选择。