mysql的varchar到底能存多少个字符
结论
(65535字节-其他列所占用的子节-varchar列长度-null标识占用字节数)/3,向下取整.
注意
- 4.0版本及以下,MySQL中varchar长度单位是
字节
,如varchar(20),指的是20字节
; - 5.0版本及以上,MySQL中varchar长度单位是
字符
。如varchar(20),指的是20字符
。
测试环境
mysql5.7
,存储引擎innodb
,utf8字符集
GBK编码:
一个英文字符占一个字节,中文2字节,单字符最大可占用2个字节。
UTF-8编码:
一个英文字符占一个字节,中文3字节,单字符最大可占用3个字节。
utf8mb4编码:
一个英文字符占一个字节,中文3字节,单字符最大占4个字节(如emoji表情4字节)。
单列
(65535-3)/3=21844
多列
(65535-其他列占用的总字节数)/3,向下取整
21844-255=21589
因为255也要占用额外的空间存储长度和null标识,实际需要255*3+长度+null标识