varchar实际长度标识位: Mysql 在读取行记录时,需要知道varchar实际存了多长,才能知道要读出几位数据。1 字节 = 8比特位 ,2 ^ 8 = 256 ,即可以标识 0 ~ 255 ; 2 字节 = 16 比特位 ,2 ^ 16 = 65536 ,即可以标识 0 ~ 65535 ,因此最多仅需要 2 字节位即可标识实际长度。
varchar(255) 与 varchar(256) 的区别在哪里?
之前看到大佬设置 varchar(255) 很好奇有什么用,简单查阅以后得知,256 需要两个标识位,255需要一个标识位,记下以后满意的离去了。
后来探究varchar长度计算方式的时候发现了问题,假如我们设定字段类型为 varchar(255) ,那我存放255个汉字,字符串的字节长度应为 255 * 3 = 765 ,765 是不能用1个字节标识的。
实际上varchar(255)和varchar(256)的区别在于索引,Mysql 5.6 之前 索引最大的长度是 767 字节 。而 767 / 3 ≈ 255 ,正好支持索引的建立。