经常看到别人设置varchar的长度是255,它可以存储多少个汉字。在phpmyadmin中看到varchar的定义是变长(0-65535),它的最大长度到底是255还是65535,是不是可以设置成varchar(60000)?还有长度和字节的关系,如上设置,它的长度就是60000,可以存储60000个字节,这样理解对吗?
可见,varchar(5)能存储5个字符,不管是数字,字母,还是汉字
该表中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.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。