VARCHAR和CHAR类型
VARCHAR
类型用于存储可变长字符串。它比定长类型更节省空间。有一种情况例外,如果MySQL表使用ROW_FORMAT=FIXED创建的话,每一行都会使用定长存储,这会很浪费空间。
VARCHAR需要使用1或2个额外字节记录字符串长度,如果列的最大长度小于或者等于255字节,则只使用1个字节表示,否则使用2个字节表示。例如一个VARCHAR(10)需要使用11个字节的存储空间。VARCHAR(1000)使用1002个字节。
由于行是可变长的,在update时可能使原来的行变长了,这会导致额外的工作。如果一个行占用的空间增长,并且在页内没有更多的空间可以存储,这时,不同的存储引擎处理的方式不一样。例如,MyISAM会将行拆成不同的片段存储,InnoDB需要分裂页来使行可以放进页内。
什么时候使用VARCHAR更合适呢?字符串列的最大长度比平均长度大很多。列的更新很少,所以碎片不是问题了。使用UTF-8这样复杂的字符集,每个字符都使用不同的字节数进行存储。
CHAR
类型是定长的,当存储CHAR值,MySQL会删除所有的末尾空格。CHAR值会根据需要采用空格填充的方式方便比较。它适合存储很短的字符串。对于经常变更的数据,CHAR也比VARCHAR更好,因为定长的CHAR不容易产生碎片。对于很短的列CHAR比VARCHAR更有优势,CHAR(1)采用单字节存储字符集,只需要一个字节。VARCHAR(1)需要2个字节,因为还有一个记录长度的额外字节。
春节不间断,持续充电!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。