首页 > 其他分享 >1071 - Specified key was too long; max key length is 767 bytes

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

时间:2024-03-30 13:33:47浏览次数:28  
标签:max bytes 767 索引 innodb key 文件格式

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';

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

HOW variables like 'innodb_large_prefix';

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

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

SET GLOBAL INNODB_LARGE_PREFIX = ON;

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

标签:max,bytes,767,索引,innodb,key,文件格式
From: https://blog.csdn.net/csdn565973850/article/details/137171124

相关文章

  • ktpass命令是Windows Server上的一个命令行工具,用于创建和管理Kerberos密钥表(Keytab)
    ktpass命令是WindowsServer上的一个命令行工具,用于创建和管理Kerberos密钥表(Keytab)。它允许管理员将用户帐户或服务帐户的凭据导出到一个可由其他系统使用的文件中,以便进行身份验证和授权。这个工具通常用于在Windows和Unix/Linux系统之间建立单点登录(SSO)的集成。通过ktpass命......
  • 解决ubuntu22.04的ssh问题--userauth_pubkey: key type ssh-rsa not in PubkeyAccepte
    问题在我新安装了一台ubuntu22.04的服务器时,配置远程服务器正常情况下,只要把握本机的公钥写到被远程主机对应用户的.ssh/authorized_keys文件中就好了但是,今天发现,虽然设置进去了,但是远程还是提示需要密码但是并不是所有的主机是这样的,同样是ubuntu22.04的服务器还是能够免......
  • Redis Map数据结构中相同key不同的字段会分散多节点存储吗?
    目录结论说明 结论   无论是单实例Redis还是Redis集群,一个Map数据类型的key对应的所有字段和值都存储在同一台机器上。在Redis集群中,这是通过哈希槽机制来保证的,确保了对同一个key的操作不需要跨节点通信,从而提高了操作的效率。说明    Redis的Map数据类......
  • 云渲染实用工具:3ds max怎么改低版本?
    3dsMax是建模领域广泛采用的专业软件,它通过定期更新来不断增强功能和提升性能。但这些频繁的更新有时会导致一些插件暂时无法与新版本完全兼容。为了解决这个问题,设计师们可以采用一个简单有效的方法,那就是将较新版本的3dsMax文件进行版本降级处理,从而确保这些文件能够在旧版本......
  • oop_promax_static
    static/*static:静态,可以修饰成员变量和方法。成员变量按照有无static修饰,分为两种:1.类变量:有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享。访问:类名.类变量(位于堆内存)2.实例变量:(对象的变量):无static修饰,属于每个对象的。访问:对象.实例变量......
  • hbase - [06] rowkey的设计
     HBase是三维有序存储的,通过rowkey(行键),columnkey(column family和qualifier)和TimeStamp(时间戳)这三个维度可以对HBase中的数据进行快速定位。HBase中rowkey可以唯一标识一行记录,在HBase查询的时候,有下列几种方式:1、通过get方式,指定rowkey获取唯一一条记录2、通过scan方式,设置......
  • Ant Design 设置必填属性的一个坑!Objects are not valid as a React child (found: ob
    1、刚开始,我是用第一种方式。通过一个变量,来设置必填属性的提示值 显示是没有问题的。但是点击ModalForm确认按钮时,报错ObjectsarenotvalidasaReactchild(found:objectwithkeys{requiredMsg}).Ifyoumeanttorenderacollectionofchildren,useanarray......
  • Key-N-Value--基于Protocol Buffers的树型协议处理引擎
    导言KNV是Key-Value协议的无限嵌套和模式自由的扩展,允许使用者快速访问或修改ProtoBuffers协议中的一部分或者多个部分,KNV原是一个面向对象缓存系统的一部分,后面作为腾讯第一批开源组件对外开源。KNV的理念也申请并获得国家专利。​​​​​​​项目地址:GitHub-shaneyuee/......
  • 【漏洞复现】MaxView系统dynamiccontent.properties接口处存在RCE漏洞
              免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。      ......
  • System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3
    VS2022.netCore5.0项目编译没问题,运行时报这个错System.IO.FileNotFoundException:“Couldnotloadfileorassembly'System.Runtime,Version=6.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a'.系统找不到指定的文件。” 我这里遇到这个问题的原因是,v......