您的当前位置:首页 >IT科技 >遇到个MySQL索引长度限制的问题 正文
时间:2025-11-04 21:05:03 来源:网络整理编辑:IT科技
前言我只是创建个索引而已,没想到还这些遇到个诡异的问题!话说你平时创建mysql时遇到过以下创建索引报错的情况吗?报错提示如下复制Specified key was too long; max key
我只是索引创建个索引而已,没想到还这些遇到个诡异的长度问题!
话说你平时创建mysql时遇到过以下创建索引报错的限制情况吗?
报错提示如下
复制Specified key was too long; max key length is 767 bytes //需要添加索引的字段的长度太长,超过了767字节1.2.🚩什么?索引长度限制?我从没遇到过啊,MySQL还会对索引键的索引长度有限制?
是的,一般都不会遇到,长度不过这个问题我一个同事就遇到了!限制
他用同样表结构和加索引的索引语法,都是长度相同的,但是限制一个测试环境和一个线上MySQL版本,一个执行成功一个执行失败!索引
事故现场:
同事A的长度迭代开发测试完了,准备将环境放到预发布了,限制在添加索引的索引时候居然创建索引报错了,瞬间一脸郁闷,长度我测试过得了啊!限制
是的,没错,虽然测过了,云南idc服务商但是因为版本不同,在为数据库字段类型(varchar(255))创建索引的时候,指定的字段有可能会超过了存储引擎默认的长度!
当然你会问,为啥要为varchar(255)创建索引啊,这个就不多追问了!
不过刚好趁对这个问题有印象,今天可以聊聊MySQL单表对索引限制的知识点!
既然MySQL 对每个单表中所创建的索引长度是有限制,我们先看下不同的存储引擎下对表的限制是什么样的。
图片
• 单列索引:最大长度不能超过 1000 bytes,否则会报警,但是创建成功,最终创建的是前缀索引(取前333个字符)。
• 联合索引:索引长度和不能超过 1000 bytes,否则会报错,创建失败
InnoDB• 单列索引:超过 767 bytes的,给出warning,最终索引创建成功,云服务器提供商取前缀索引(取前 255 字符)
• 联合索引:各列长度不超过 767 字节 ,如果有超过 767 bytes 的,则给出报警,索引最后创建成功,但是对于超过 767 字节的列取前缀索引,与索引列顺序无关,总和不得超过 3072 ,否则失败,无法创建
默认情况下utf编码一个字符占三个字节,也就是说在InnoDB引擎中,4个varchar(255)字段就把单表索引长度给占满了哦!
3072 / 767 约等于 4, 而varchar(255),在utf8编码下是765字节,因此四个varchar(255)字段就快超过综合3072了
图片
MySQL5.5 版本:引入了 innodb_large_prefix,用来禁用大型前缀索引,以便与不支持大索引键前缀的早期版本的 InnoDB 兼容
开启 innodb_large_prefix 可以使单索引的长度限制达到 3072 字节(但是联合索引总长度限制还是 3072 字节),禁用时单索引的长度限制为 767 字节
MySQL5.7: MySQL5.5版本与MySQL5.6 版本,innodb_large_prefix 是默认关闭的,在 MySQL5.7 及以上版本则默认开启
MySQL8.0 版本:innodb_large_prefix 已被移除,b2b供应网从版本 8.0 开始,索引长度限制由行格式决定若行格式为 DYNAMIC 或 COMPRESSED 时,限制值为 3072,而行格式 REDUNDANT 或 COMPACT 时,限制值为 767。
MySQL在5.7及以上版本在InnoDB引擎中默认行格式是 DYNAMIC,所以限制长度为3072字节。
了解完存储引擎和不同MySQL版本对索引长度的限制,我们以InnoDB引擎为例,看MySQL不同的字符集对索引长度有啥影响。
未开启 innodb_large_prefix
图片
未开启 innodb_large_prefix
MySQL5.7默认开启了innodb_large_prefix,或者更高版本,比如MySQL8
图片
UTF8编码占用3个字节,能表示除了表情符之外的其他字符,UFT8mb4占用4个字节,既能表示汉字也能表示表情符。
针对这个问题,一般来说可以考虑一下几种方式去处理
• 将varchar(255)字段改成更小的字符长度类型
• 如果是MySQL5.5版本与MySQL5.6 版本,可以启用innodb_large_prefix参数,来使得单个索引字段的长度突破767
• 这种大字段类型可以考虑前缀索引
毕竟varchar(255)这种长度的类型作为索引相对来说并不是那么合适!
以硬盘制作启动盘的教程(轻松创建自己的启动盘,解决系统问题一键搞定)2025-11-04 20:41
W2000K显卡(W2000K显卡)2025-11-04 20:38
探索Airpal爱宝乐(功能全面、安全可靠、智能便捷,Airpal爱宝乐值得拥有!)2025-11-04 20:28
探索VGNSR55E的强大功能和性能(发现VGNSR55E的关键特点及优势)2025-11-04 20:25
手工卡通电脑折纸教程(通过简单的折纸技巧,制作属于你自己的电脑卡通形象!)2025-11-04 20:18
以附近约会怎么样?(发现身边的浪漫与乐趣)2025-11-04 20:17
不贴膜的6s手机会有什么后果?(探究不贴膜对6s手机的影响,保护屏幕从贴膜开始)2025-11-04 20:13
任天堂2DS(探索这款便携式掌机的魅力与创新)2025-11-04 19:42
解决宽带错误651调制解调器问题的有效方法(解决宽带错误651的实用技巧和技术指导)2025-11-04 19:41
华为环保回收(华为的环保回收计划及其关键举措)2025-11-04 18:44
深入了解live2d电脑教程(学习live2d电脑教程的关键技巧与方法)2025-11-04 20:31
诺基亚6带来优质音乐体验(以诺基亚6为你的音乐伴侣,尽享高品质声音)2025-11-04 19:55
探索Airpal爱宝乐(功能全面、安全可靠、智能便捷,Airpal爱宝乐值得拥有!)2025-11-04 19:54
以小狐鲜的水果怎么样?(探寻小狐鲜水果的新鲜与营养)2025-11-04 19:36
深入了解u深度制作教程(从入门到精通,助你成为AI大师)2025-11-04 19:29
无人机干扰飞机的威胁与应对措施(现代航空安全面临的新挑战及其应对方法)2025-11-04 19:22
复仇者联盟(一触即发的全球拯救战,席卷影迷的热血情怀)2025-11-04 18:57
老板烟灶(让烹饪成为一种享受,用老板烟灶带来便捷与高效)2025-11-04 18:52
联想电脑账户密码错误的原因及解决方法(探索联想电脑账户密码错误的背后问题,教你轻松解决困扰)2025-11-04 18:39
艾泰utt512w的性能及特点剖析(高速传输与稳定性能,艾泰utt512w的亮点解析)2025-11-04 18:28