ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL++:Error Specified key was too long; max key length is 767 bytes

2021-07-06 14:02:01  阅读:178  来源: 互联网

标签:varchar ++ max 767 large prefix innodb key


今天生产上遇到上述的bug:

系统变量innodb_large_prefix开启了,则对于使用DYNAMIC或COMPRESSED行格式的InnoDB表,索引键前缀限制为3072字节。如果禁用innodb_large_prefix,不管是什么表,索引键前缀限制为767字节。

上述的bug很明显是索引超出了限制的长度767(我司生产上innodb_large_prefix禁用了):

我发现报错的那张表建立了一个varchar类型的索引,varchar(255),觉得没什么问题,其实不然,上述的767是字节,而varchar类型是字符,同时我发现我使用的字符集为(utf8mb4),这个指每个字符最大的字节数为4,所以很明显 4*255 > 767

所以就报上述错了(Specified key was too long; max key length is 767 bytes)。

解决方法:

改变varchar的字符数,我改成了64就可以了。varchar(64)

或者启用innodb_large_prefix,那么限制值会增加到3072

标签:varchar,++,max,767,large,prefix,innodb,key
来源: https://www.cnblogs.com/codingmode/p/14976566.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有