首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >1071 - Specified key was too long; max key length is 767 bytes

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

作者头像
六月的雨在Tencent
发布2024-04-08 07:51:51
发布2024-04-08 07:51:51
4.1K0
举报
文章被收录于专栏:CSDNCSDN

问题背景

今天在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字节就会出现这个问题。那么对于问题的处理就是增大索引长度限制。 先查询一下当前的数据库版本

代码语言:javascript
复制
SHOW variables like 'version';

在查询一下数据库参数innodb_large_prefix是否是关闭状态,5.6版本默认是关闭,5.7以后默认是开启的

代码语言:javascript
复制
HOW variables like 'innodb_large_prefix';

在查询一下数据库的引擎文件格式innodb_file_format

代码语言:javascript
复制
SHOW variables like 'innodb_file_format';

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,那么就可以创建索引成功,因此需要先开启前缀索引,执行命令如下

代码语言:javascript
复制
SET GLOBAL INNODB_LARGE_PREFIX = ON;

开启后执行查询命令可以看到开启成功

这时再给建表语句加上ROW_FORMAT = Dynamic尝试,可以看到表就可以创建成功了

那么到这里,关于Specified key was too long; max key length is 767 bytes的问题就处理完了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题背景
  • 问题分析处理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档