Skip to main content

MySQL 创建索引报错 "Specified key was too long; max key length is 767 bytes"原因

在MySQL中,一般我们会给varchar类型设置255长度,但当我们给该字段设置索引时可能会报以下错误:

#1071 - Specified key was too long; max key length is 767 bytes

报错原因:

767字节是 MySQL 版本5.6(以及以前版本)中 InnoDB 表的最大索引前缀长度限制,MyISAM 表的长度为1,000字节。在 MySQL 版本5.7及以上版本中,这个限制增加到了3072字节。

如果对 utf8mb4编码的 varchar 字段设置索引,因为utf8mb4编码每个字符占4个字节,所以必须将最大索引前缀长度767字节(或3072字节)除以4,得到191,这是字段的最大字符长度。如果是 utf8 编码,它将是三个字节,最大索引前缀长度为255。

也就是对于MySQL版本5.6(以及以前版本),如果设置为InnoDB、utf8mb4编码,varchar 字段要想设置索引,字段长度必须小于等于 191;utf8编码,varchar 字段要想设置索引,字段长度必须小于等于 255

5.7及以上版本中这个数变大了,对于 varchar 类型建立索引一般没有影响了,因为一般我们不会设置太大的varchar类型字段。