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

简介: 【2月更文挑战第5天】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

image.png

下面来分析如何处理

问题分析处理

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

先查询一下当前的数据库版本

SHOW variables like 'version';

image.png

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

SHOW variables like 'innodb_large_prefix';

image.png

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

SHOW variables like 'innodb_file_format';

image.png

InnoDB支持两种文件格式 Antelope和Barracuda:

Antelope :是5.6之前的文件格式,支持InnoDB表的COMPACT和REDUNDANT行格式,共享表空间默认为Antelope

Barracuda:是最新的文件格式,支持所有innodb行格式,包括最新的COMPRESSED和DYNAMIC行格式。

以下是ROW_FORMAT的值

image.png

如果开启innodb_large_prefix,且Innodb表的存储格式为 DYNAMIC 或 COMPRESSED,则前缀索引最多可包含3072个字节,前缀索引也同样适用。对于上面的索引问题(120+200+200)*4=2080 < 3072,那么就可以创建索引成功,因此需要先开启前缀索引,执行命令如下

SET GLOBAL INNODB_LARGE_PREFIX = ON;

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

image.png

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

image.png

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

相关文章
|
25天前
|
关系型数据库 MySQL
MySQL创建表出现 Specified key was too long; max key length is 767 bytes
MySQL创建表出现 Specified key was too long; max key length is 767 bytes
18 2
|
4月前
|
关系型数据库 MySQL 索引
(1071, ‘Specified key was too long; max key length is 767 bytes‘)
(1071, ‘Specified key was too long; max key length is 767 bytes‘)
18 0
|
1月前
|
JSON JavaScript 前端开发
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
37 0
|
1月前
|
编译器 C语言
c语言中long的作用类型
c语言中long的作用类型
24 0
|
6月前
|
Java
【面试题精讲】Java超过long类型的数据如何表示
【面试题精讲】Java超过long类型的数据如何表示
|
1月前
|
存储
TS 自定义结构Long与number类型相互转换
TS 自定义结构Long与number类型相互转换
|
2月前
|
Oracle 关系型数据库 数据库
Flink Sink to Oracle 存在字段CLOB类型,如何处理错误”ORA-01461: 仅能绑定要插入LONG的LONG值“
做Flink CDC同步数据过程中,目标是Oracle数据库,其中某个字段较大被设置为CLOB类型,其中会遇到异常,”ORA-01461: 仅能绑定要插入LONG的LONG值“
|
3月前
|
存储 前端开发 JavaScript
由Long类型引发的生产事故
由Long类型引发的生产事故
|
3月前
|
缓存
Long包装类型的享元模式注意事项
昨天修复订单接口的bug
30 0
|
3月前
|
存储 自然语言处理 安全
【C++11保姆级教程】空指针(nullptr),long long类型,char16_t和char32_t类型
【C++11保姆级教程】空指针(nullptr),long long类型,char16_t和char32_t类型
【C++11保姆级教程】空指针(nullptr),long long类型,char16_t和char32_t类型