暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

mysq5.7.28配置innodb_page_size错误引起的错误1071(42000)

原创 青竹 2020-10-05
1123

1.错误711(42000):指定的密钥太长;无法创建。最大密钥长度为1536字节错误;
2.环境:数据库版本:mysql5.7.28

      操作系统:centos6.8

3.```创建表QRTZ_BLOB_TRIGGERS
->SCHED_NAME varchar(120)CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,

->TRIGGER_NAME varchar(200)CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,

->TRIGGER_GROUP varchar(200)字符集utf8 COLLATE utf8_general_ci NOT NULL,

->BLOB_DATA blob为NULL,

->使用BTREE的主键(“ SCHED_NAME”,“ TRIGGER_NAME”,“ TRIGGER_GROUP”),

-> CONSTRAINTqrtz_blob_triggers_ibfk_1外键(SCHED_NAMETRIGGER_NAMETRIGGER_GROUP)参考QRTZ_TRIGGERSSCHED_NAMETRIGGER_NAMETRIGGER_GROUP)删除后重新更新

->)ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT ='InnoDB free:504832 kB;
(`SCHED_NAMETRIGGER_NAMETRIGGE’ROW_FORMAT =动态;

错误1071(42000):指定的密钥太长;
最大密钥长度为1536字节

4.查询官方文档该错误是由 系统变量innodb_large_prefix(设置启用, 注意实验版本为MySQL 5.6.41,而是关闭的,

MySQL 5.7版本开启 ),则对于使用DYNAMIC或COMPRESSED行格式的InnoDB表,索引键扩展限制为3072字节。

innodb_large_prefix,则对于任何行格式的表,索引键限制限制为767字节。

在MySQL 5.5中约会了innodb_large_prefix,使用了大量的大型索引.对于使用REDUNDANT或COMPACT行格式的InnoDB表,索引键长度限制为767字节。例如,您可能会在TEXT或VARCHAR列上使

用超过255个字符的列索引索引达到此限制,假设为utf8mb3字符集,并且每个字符最多包含3个字节。

尝试使用超出限制的索引键扩展长度会返回错误。要避免复制配置中出现此类错误,请避免在主服务器上启用

enableinnodb_large_prefix(如果无法在从服务器上启用)。


适用于索引键预设的限制也适用于全列索引键。

注意:上面是767个字节,而不是字符,具体到字符数量,由此跟字符集有关。GBK是双字节的,UTF-8是三字节的




5.官方提供解决方案:

1:系统变量innodb_large_prefix为ON
2:系统变量innodb_file_format为梭子鱼
3:ROW_FORMAT为动态或压缩

6.经测试改变上述三个参数依然无法解决报错问题,但是尝试安装安装的默认配置文件部署mysql是可以正常创建,判断是由

配置文件引起的无法创建表问题,通过测试发现配置文件中innodb_page_size参数配置大小为8192,而默认配置大小

是16384,调整该参数至16384问题解决。

7.上述创建的语句中外键索引所需字节大小为(120 + 200 + 200)* 3 = 1560,但是为何页面页替换16k就没问题,没有找到直观的证据,暂未可知(据说应该是页大小和索引行长度的关系,16k的页对应3072,8k的页对应1536)
最后修改时间:2020-10-05 09:43:17
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论