MySQL char和varchar长度的问题

MYSQL 字符类型常用的两个说明
类型 大小 用途
CHAR 0-255字节 定长字符串
VARCHAR 0-65535字节 变长字符串

mysql varchar字段到底能存放多少数据? 看看下面的例子

结果是:
id content
1 12345
2 中国人民银

可见,varchar(5)能存储5个字符,不管是数字,字母,还是汉字.

varchar(0~65535) 这个65535是指最大字节长度,不是字符长度,不是字符长度,不是字符长度。

该表中varchar类型的字段能容纳的最大字符数21842是怎么得来的?
21842 = (65535-1-2-4)/3
MySQL要求一个行的定义长度不能超过65535(包括多个字段),所以有65535.
varchar的最大有效长度取决于最大行大小.
减1的原因是实际行的存储从第2个字节开始.
减2的原因是varchar头部的2个字节表示长度.
减4的原因是字段id的int类型占用4个字节.
除以3的原因是一个utf8字符占用3个字节.

如果你在test2表里把varchar(21842)改为varchar(21844),那么就会报以下错误:
1118 – Row size too large.
The maximum row size for the used table type, not counting BLOBs, is 65535.
This includes storage overhead, check the manual.
You have to change some columns to TEXT or BLOBs.

MySQL中char,varchar与text类型的选用:
知道固定长度的用char,比如MD5串固定是32位.
经常变化的字段用varchar.
超过255字符的只能用varchar或者text,不能用char.
能用varchar的地方不用text.

原文地址:https://segmentfault.com/q/1010000003040054

发表评论

邮箱地址不会被公开。 必填项已用*标注