【MySQL】不同字符集varchar长度问题

xixuefeng MySQL, MySQL-DEV 2018-02-21 19:03:37 581 次浏览 【MySQL】不同字符集varchar长度问题已关闭评论

一般我们的理解,如Oracle,如果字符集是GBK,那么每个中文字符占2个字节,如果是UTF8,那么每个中文字符占3个字节。

1:Oracle 11.2.0.4 for Windows

在MySQL中会怎样呢?当然MySQL5.0前后是不同的,当然现在我们用的大多是5.0以后的,所以,我们就不考虑之前的情况了

2:MySQL 5.7 创建两个数据库db1,db2,字符集分别是UTF8,GBK

2.1:db1:UTF8字符集

2.2:db2:GBK字符集

3:MySQL插入数据

表中的name长度为9,因为在建表的时候已经按照字符集做了响应的缩减(本测试是UTF8,所以,一个字符占三个字节),所以字段长度的9,就是可以存放9个字符(中文或英文)。

4:小结

1)不同的字符集,varchar的最大长度也不同。gbk:32767    utf8:21845

2)表中所有字段是有长度限制的,根据字符集不同而不同(gbk:32767    utf8:21845),所以,我们在建表的时候,字符型字段的长度也要搂着用,别动不动就几百几千的设置,一是给别的字段留点儿空间,二是,如果varchar过长,导致这个字段的索引会占用更大的空间和使用更多的内存,对性能造成一定的影响。

 

回顶部