mysql中数据表用utf8编码存储浪费空间

Author:David | 【转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
URL:

一直没搞明白mysql里面数据表编码用utf8和latin1差别在哪里,虽然显示上是乱码,但是数据底层是一样的,所以可以往latin1编码的数据表里面读写utf8的数据。

今天测试了一下才知道,差别在于utf8格式的文本字段比如char(9)可以插入9个中文字符,而latin1格式的char(9)只能插入3个中文字符(1个utf-8的中文字符占3个字节)。

如果按照一般的理解,因为是定长字段,所以utf8格式的char(9)应该是27个字节,但却只能插入9个英文字符,所以剩下的18个字节是浪费的。

测试后发现确实如此,插入1000行'111111111',utf8的数据表大小28.3 KB,latin1的数据表只有10.8 KB,刚好多出了大概18000个字节。

mysql里面是可以对每个字段定义字符编码的,指定一个表的编码格式时,只影响文本字段(char、varchar、text),所以只有当char或varchar字段用来存储中文或特殊字符时,才用utf8编码,如果是text字段,则使用latin1即可。

评论:

utf-8 是不定长的,在1-3字节之间。

(选填)

(必填)

(选填)


Clicki