Specified key was too long, max key length is 767 bytes

问题来源

为表创建索引 符合索引的时候,执行到如下语句会抛出 Specified key was too long; max key length is 767 bytes的错误

问题原因

是由于mysql的最大索引长度导致,默认情况下,InnoDB 引擎单一字段索引的长度最大为 767 字节(MYISAM为1000) 即: 768/2=384个双字节 或者 768/3=256个三字节的字段 ,GBK是双字节的,UTF-8是三字节的,utf8mb4_unicode_ci是四字节的,长度为0~65535字节,所以为utf8mb4_unicode_ci长度为类型的字段创建索引会出现此错误。

问题解决

创建索引时,为索引字段指定长度。

(1)navicat如下图方式指定
navicat指定单字段长度

(2)语句执行加上限制长度
"ALTER TABLE " + tableName + " ADD INDEX index_userIdAndSchoolId(userId(180),schoolId(20))

你可能感兴趣的:(Specified key was too long, max key length is 767 bytes)