千家信息网

mysql索引过长以及专用密匙太长的解决方法

发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,今天就跟大家聊聊有关mysql索引过长以及专用密匙太长的解决方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在创建要给表的时候遇到一个有意思
千家信息网最后更新 2025年11月12日mysql索引过长以及专用密匙太长的解决方法

今天就跟大家聊聊有关mysql索引过长以及专用密匙太长的解决方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

在创建要给表的时候遇到一个有意思的问题,提示Specified key was too long; max key length is 767 bytes,从描述上来看,是Key太长,超过了指定的 767字节限制

下面是产生问题的表结构

CREATE TABLE `test_table` (  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,  `name` varchar(1000) NOT NULL DEFAULT '',  `link` varchar(1000) NOT NULL DEFAULT '',  PRIMARY KEY (`id`),  KEY `name` (`name`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

我们可以看到,对于name,我们设置长度为1000可变字符,因为采用utf8mb4编码, 所以它的大小就变成了 1000 * 4 > 767
所以再不修改其他配置的前提下,varchar的长度大小应该是 767 / 4 = 191

有兴趣的同学可以测试下,分别指定name大小为191, 192时,是不是前面的可以创建表成功,后面的创建表失败,并提示错误Specified key was too long; max key length is 767 bytes

解决办法一

  • 使用innodb引擎

  • 启用innodb_large_prefix选项,修改约束扩展至3072字节

  • 重新创建数据库

my.cnf配置

set global innodb_large_prefix=on;set global innodb_file_per_table=on;set global innodb_file_format=BARRACUDA;set global innodb_file_format_max=BARRACUDA;

上面这个3072字节的得出原因如下

我们知道InnoDB一个page的默认大小是16k。由于是Btree组织,要求叶子节点上一个page至少要包含两条记录(否则就退化链表了)。
所以一个记录最多不能超过8k。又由于InnoDB的聚簇索引结构,一个二级索引要包含主键索引,因此每个单个索引不能超过4k (极端情况,pk和某个二级索引都达到这个限制)。
由于需要预留和辅助空间,扣掉后不能超过3500,取个"整数"就是(1024*3)。

解决办法二

在创建表的时候,加上 row_format=DYNAMIC

CREATE TABLE `test_table` (  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,  `name` varchar(255) NOT NULL DEFAULT '',  `link` varchar(255) NOT NULL DEFAULT '',  PRIMARY KEY (`id`),  KEY `name` (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 row_format=DYNAMIC;

这个参数的作用如下

MySQL 索引只支持767个字节,utf8mb4 每个字符占用4个字节,所以索引最大长度只能为191个字符,即varchar(191),若想要使用更大的字段,mysql需要设置成支持数据压缩,并且修改表属性 row_format ={DYNAMIC|COMPRESSED}

看完上述内容,你们对mysql索引过长以及专用密匙太长的解决方法有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

索引 字节 大小 内容 字符 长度 支持 方法 专用 办法 数据 时候 结构 问题 提示 配置 限制 最大 成功 有意思 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 如何在本地搭建好web服务器 苏州网络安全平台登录 幻塔服务器和别人不一样怎么办 朝阳区数据网络技术咨询概况 网络安全教育宣传方案 广州易通网络技术有限公司地址 网络安全六个特性 ui在线制作带数据库 华为 无线软件开发 数据库连接单片机 互联网科技公司注册流程 app软件开发的主要特点 巨块数据库 怀旧服如何取消自动连接服务器 sql 读取数据库 工程力学做软件开发 山东网络安全与信息化技术中心 万方数据库作者发文检索的资源 北京网络软件开发包括什么 河南智能边缘计算服务器厂家 山东刷脸互联网科技有限公司 网络安全开设二本院校有哪些 sal数据库备份到局域网 discuz迁移服务器 软件开发有限公司如何盈利 英雄联盟国家服务器怎么弄 直播家庭教育与网络安全 x6-2服务器 天津银联网络技术服务信息中心 关系数据库的三要素组成与作用
0