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)