参考链接:MySQL 数据库 varchar 到底可以存多少个汉字,多少个英文
首先我们需要了解utf-8和GBK的区别,因为不同的编码格所占的字节数是不同的
中文 | 英文 | |
---|---|---|
utf-8 | 1~3个字节 | 1个字节 |
GBK | 2个字节 | 1个字节 |
Utf-8mb4(兼容utf-8) | 1~4位字节(mysql5.5之后,能用更多字符表示数据) | 1个字节 |
VarChar(n) 代表能存储n个字符,即不管是英文还是汉字都能存储n个,不同的是存储用的字节数
关于mysql能存多少值
- mysql的记录行长度是有限制的,不是无限长的,这个长度是
64K
,即65535
个字节,对所有的表都是一样的。
这个65535是指整行的长度,如果当前行还有其他字段总的字节数也会被占用。像blob和text类型是内容与行的其余部分分开存储,所以在行中存储的只有9~12个字节
- MySQL对于变长类型的字段会有1-2个字节来保存字符长度。
- 当字符数小于等于255时,MySQL只用1个字节来记录,因为2的8次方减1只能存到255。
- 当字符数多余255时,就得用2个字节来存长度了。
- 在
utf-8
状态下的varchar,最大只能到 (65535 - 2) / 3 = 21844 余 1。 - 在
gbk
状态下的varchar, 最大只能到 (65535 - 2) / 2 = 32766 余 1。