如何理解mysql utf-8的varchar类型的长度?
比如varchar(3),括号里的3代表最多能输入3个值,这里的值包括中文/英文/数字,即是说最多只能输入3个汉字,或者3个英文,或者3个数字,亦或者3个中/英/数的任意组合。
当然了,这并非代表存入3个汉字的值所占字节跟存入3个英文/数字所占字节是一样的,比如
value | char_length | length(所占字节) |
---|---|---|
哈哈哈 | 3 | 9 |
hhh | 3 | 3 |
111 | 3 | 3 |
这里延伸一个实际业务中可能会遇到的错误
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 innodb表要求一个行的定义长度不能超过65535,这里的65535指的是字节,假设你的表中所有字段都是varchar类型,那你是不可能建出11个varchar(2000)的字段来的,因为
11*2000*3=66000 > 65535