mysql中数据表用utf8编码存储浪费空间
URL:http://blog.iyi.cn/start/2008/01/mysqlutf8.html
一直没搞明白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字节之间。
by: liwei | January 3, 2008 6:40 PM