当前位置:   article > 正文

1071 - Specified key was too long; max key length is 767 bytes_1071 - specified key was too long; max key length

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

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

问题背景

今天在Mysql建表的过程中,遇到了一个这样的问题,错误信息 1071 - Specified key was too long; max key length is 767 bytes
在这里插入图片描述
下面来分析如何处理

问题分析处理

根据错误提示来看是说主键key长度太长,超过了767字节。分析主键字段PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)以及utf8mb4最大支持4个字节长度,那么这三个字段相加*3的长度远超767字节就会出现这个问题。那么对于问题的处理就是增大索引长度限制。
先查询一下当前的数据库版本

SHOW variables like 'version';
  • 1

在这里插入图片描述
在查询一下数据库参数innodb_large_prefix是否是关闭状态,5.6版本默认是关闭,5.7以后默认是开启的

HOW variables like 'innodb_large_prefix';
  • 1

在这里插入图片描述
在查询一下数据库的引擎文件格式innodb_file_format

SHOW variables like 'innodb_file_format';
  • 1

在这里插入图片描述
InnoDB支持两种文件格式 Antelope和Barracuda:
Antelope :是5.6之前的文件格式,支持InnoDB表的COMPACT和REDUNDANT行格式,共享表空间默认为Antelope
Barracuda:是最新的文件格式,支持所有innodb行格式,包括最新的COMPRESSED和DYNAMIC行格式。
以下是ROW_FORMAT的值
在这里插入图片描述
如果开启innodb_large_prefix,且Innodb表的存储格式为 DYNAMIC 或 COMPRESSED,则前缀索引最多可包含3072个字节,前缀索引也同样适用。对于上面的索引问题(120+200+200)*4=2080 < 3072,那么就可以创建索引成功,因此需要先开启前缀索引,执行命令如下

SET GLOBAL INNODB_LARGE_PREFIX = ON;
  • 1

开启后执行查询命令可以看到开启成功
在这里插入图片描述
这时再给建表语句加上ROW_FORMAT = Dynamic尝试,可以看到表就可以创建成功了
在这里插入图片描述
那么到这里,关于Specified key was too long; max key length is 767 bytes的问题就处理完了。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号