mysql 报错 Specified key was too long; max key length is 767 bytes
当mysql数据库的字符集使用了utf8mb4,就很容易在执行建表sql的时候报这个错误。
原因:
mysql有个系统变量innodb_large_prefix,
如果开启了,索引键前缀限制为3072字节;
如果禁用了,索引键前缀限制为767字节。
当mysql数据库的字符集使用了utf8mb4,每个字符最大的字节数为4,如果建表语句中,有类似varchar(255)的字段,4*255 > 767,就会报这个错: Specified key was too long; max key length is 767 bytes。
解决:
方法1:varchar(x),x<191,那么4*x<767,就不会报错。
方法2:开启系统变量:innodb_large_prefix,如下操作:
mysql> set global innodb_file_format = BARRACUDA;
Query OK, 0 rows affected (0.00 sec)
mysql> set global innodb_large_prefix = ON;
Query OK, 0 rows affected (0.00 sec)

本文介绍了MySQL使用utf8mb4字符集时遇到的Specifiedkeywastoolong错误及其原因。详细解释了innodb_large_prefix系统变量的作用,并提供了两种解决方法。
2万+

被折叠的 条评论
为什么被折叠?



