首页 资讯 社群 我的社区 搜索

mysql中InnoDB关于最长索引限制的问题

高大上
2019-08-12 21:51:47

今天在执行一个sql脚本时系统提示:ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

检查后发现他们使用的mysql5.6,但是我习惯使用5.7以上的版本。中间会存在一个差异:

mysql 5.6,innodb_large_prefix 默认是关闭的,但是5.7默认时开启的。

他会影响到mysql对于索引键的最大长度限制,5.6默认最大长度为767字节,5.7默认最大长度为3072字节。当索引信息超过长度时就会出现上述异常。

解决办法是升级数据库版本或者修改5.6的配置:

SHOW VARIABLES LIKE '%innodb_large_prefix%';
SET GLOBAL innodb_large_prefix=ON;
SHOW VARIABLES LIKE '%innodb_file_format%';
SET GLOBAL innodb_file_format=Barracuda;

同时在创建超长的表的创建语句后添加 ROW_FORMAT=DYNAMIC

只有varchar会出现索引超长的情况,char不会~

用户评论