MySQL5.6 varchar在UTF8下存储汉字的长度

对于UTF8字符下有的汉字占三个字节,有的占4个字节,详情请见:http://blog.csdn.net/chummyhe89/article/details/7777613

a) 若一个表只有一个varchar类型,如定义为 
create table t4(c varchar(N)) charset=gbk; 
则此处N的最大值为(65535-1-2)/2= 32766。 
减1的原因是实际行存储从第二个字节开始'; 
减2的原因是varchar头部的2个字节表示长度; 
除2的原因是字符编码是gbk。 

b) 若一个表定义为 
create table t4(c int, c2 char(30), c3 varchar(N)) charset=utf8; 
则此处N的最大值为 (65535-1-2-4-30*3)/3=21812 
减1和减2与上例相同; 
减4的原因是int类型的c占4个字节; 
减30*3的原因是char(30)占用90个字节,编码是utf8。 
如果被varchar超过上述的b规则,被强转成text类型,则每个字段占用定义长度为11字节,当然这已经不是“varchar”了。


varchar(n)  n表示就是字符数,不是字节数

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页