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的问题就处理完了。

相关文章
|
6月前
|
关系型数据库 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
67 2
|
6月前
|
关系型数据库 MySQL 数据库
Specified key was too long; max key length is 767 bytes导入mysql数据库表报错
Specified key was too long; max key length is 767 bytes导入mysql数据库表报错
47 0
|
6月前
|
JSON JavaScript 前端开发
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
497 0
|
6月前
|
编译器 C语言
c语言中long的作用类型
c语言中long的作用类型
146 0
【面试题精讲】Java超过long类型的数据如何表示
【面试题精讲】Java超过long类型的数据如何表示
|
2天前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
9 3
|
1天前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
9 1
|
3月前
|
前端开发 Java 数据库
Java系列之 Long类型返回前端精度丢失
这篇文章讨论了Java后端实体类中Long类型数据在传递给前端时出现的精度丢失问题,并提供了通过在实体类字段上添加`@JsonSerialize(using = ToStringSerializer.class)`注解来确保精度的解决方法。
|
6月前
|
安全 Java 编译器
long类型在32位操作系统上的安全问题
long类型在32位操作系统上的安全问题
147 1
|
5月前
|
Java
springboot解决jackson序列化Long类型精度失效问题
springboot解决jackson序列化Long类型精度失效问题
129 0