不同存储引擎索引长度
既然MySQL 对每个单表中所创建的索引长度是有限制,我们先看下不同的存储引擎下对表的限制是什么样的。
MyISAM
-
• 单列索引:最大长度不能超过 1000 bytes,否则会报警,但是创建成功,最终创建的是前缀索引(取前333个字符)。
-
• 联合索引:索引长度和不能超过 1000 bytes,否则会报错,创建失败
InnoDB
-
• 单列索引:超过 767 bytes的,给出warning,最终索引创建成功,取前缀索引(取前 255 字符)
-
• 联合索引:各列长度不超过 767 字节 ,如果有超过 767 bytes 的,则给出报警,索引最后创建成功,但是对于超过 767 字节的列取前缀索引,与索引列顺序无关,总和不得超过 3072 ,否则失败,无法创建
默认情况下utf编码一个字符占三个字节,也就是说在InnoDB引擎中,4个varchar(255)字段就把单表索引长度给占满了哦!