Mysql字节长度

时间:2013-06-22 21:38:58

标签: mysql

我遇到了一个website,其中说明了以下内容:

  

Ex:CountryCode CHAR(3)CHARSET utf8

     

我们要求的是一个完全包含3个字符的列。此列所需的存储空间   将是任何3个字母的名称必须适合。这意味着(3个字符)次(3个字节   每个字符)= 9个字节的存储空间。因此CHAR和utf8可能不太理想。   VARCHAR表现得更好:它只需要每个字符的字节数,如上所述。所以   文本“abc”只需要3个字节

我需要文本'abc'(使用utf8和char(3))3个字节或9个字节?! 感谢

1 个答案:

答案 0 :(得分:2)

MySQL的内部结构将CHAR字段直接放在表结构中,例如一个简单的表格如下:

create table foo (
   id int
   name char(3)
);

会产生类似

的磁盘记录
xxxxccccccccc
^^^^-- 4 bytes of int storage space
    ^^^^^^^^^ 9 bytes of utf-8 char space

由于MySQL无法事先知道您将在该字段中存储哪种文本,因此 HAS 假设最坏情况,并分配3个字符的空间。 '绝对是最长的'utf-8文本可能需要。如果没有,则过长的字符串会溢出磁盘存储并开始在相邻记录上涂写。

另一方面,

varchar在表的原始数据中只有一个小的“存根”数据部分,而varchar的内容存储在其他地方。这意味着无论你使用什么类型的字符集,你的varchar(3)总是会占用相同数量的表空间存储空间。