1. varchar可设置的最大值
21842 = (65535-1-2-4)/3
MySQL要求一个行的定义长度不能超过65535(包括多个字段),所以有65535.
varchar的最大有效长度取决于最大行大小.
- 减1的原因是实际行的存储从第2个字节开始.
- 减2的原因是varchar头部的2个字节表示长度.
- 减4的原因是字段id的int类型占用4个字节.
- 除以3的原因是一个utf8字符占用3个字节.
2. 为什么经常设置varchar(255)
InnoDB存储引擎的表索引的前缀长度最长是767字节(bytes)
你如果需要建索引,就不能超过 767 bytes;utf8编码时 255*3=765bytes ,恰恰是能建索引情况下的最大值。
如果使用的是utf8mb4编码,默认字符长度则应该是 767除以4向下取整,也就是191。