12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
ADADADADAD
mysql数据库 时间:2024-11-28 13:00:47
作者:文/会员上传
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
帮客户部署一套mysql并导入数据时出现ERROR 1071 (42000): Specified key was too long; max key length is 1536 bytes错误;环境:数据库版本:mysql5.7.28 操作系统:centos6.8CR
以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。
帮客户部署一套mysql并导入数据时出现ERROR 1071 (42000): Specified key was too long; max key length is 1536 bytes错误;
环境:数据库版本:mysql5.7.28
操作系统:centos6.8
CREATETABLE`QRTZ_BLOB_TRIGGERS`(->`SCHED_NAME`varchar(120)CHARACTERSETutf8COLLATEutf8_general_ciNOTNULL,->`TRIGGER_NAME`varchar(200)CHARACTERSETutf8COLLATEutf8_general_ciNOTNULL,->`TRIGGER_GROUP`varchar(200)CHARACTERSETutf8COLLATEutf8_general_ciNOTNULL,->`BLOB_DATA`blobNULL,->PRIMARYKEY(`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`)USINGBTREE,->CONSTRAINT`qrtz_blob_triggers_ibfk_1`FOREIGNKEY(`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`)REFERENCES`QRTZ_TRIGGERS`(`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`)ONDELETERESTRICTONUPDATERESTRICT->)ENGINE=InnoDBCHARACTERSET=utf8COLLATE=utf8_general_ciCOMMENT='InnoDBfree:504832kB;(`SCHED_NAME``TRIGGER_NAME``TRIGGE'ROW_FORMAT=Dynamic;ERROR1071(42000):Specifiedkeywastoolong;maxkeylengthis1536bytes
4.查询官方文档该错误是由系统变量innodb_large_prefix(默认启用,注意实验版本为MySQL 5.6.41,默认是关闭的,
MySQL 5.7默认开启),则对于使用DYNAMIC或COMPRESSED行格式的InnoDB表,索引键前缀限制为3072字节。如果禁用
innodb_large_prefix,则对于任何行格式的表,索引键前缀限制为767字节。
nnodb_large_prefix将在以后的版本中删除、弃用。在MySQL 5.5中引入了innodb_large_prefix,用来禁用大型前缀索引,
以便与不支持大索引键前缀的早期版本的InnoDB兼容。
对于使用REDUNDANT或COMPACT行格式的InnoDB表,索引键前缀长度限制为767字节。例如,您可能会在TEXT或VARCHAR列上使
用超过255个字符的列前缀索引达到此限制,假设为utf8mb3字符集,并且每个字符最多包含3个字节。
尝试使用超出限制的索引键前缀长度会返回错误。要避免复制配置中出现此类错误,请避免在主服务器上启用
enableinnodb_large_prefix(如果无法在从服务器上启用)。
适用于索引键前缀的限制也适用于全列索引键。
注意:上面是767个字节,而不是字符,具体到字符数量,这就跟字符集有关。GBK是双字节的,UTF-8是三字节的
5.官方提供解决方案:
1: 系统变量innodb_large_prefix为ON2: 系统变量innodb_file_format为Barracuda3: ROW_FORMAT为DYNAMIC或COMPRESSED
6.经测试改变上述三个参数依然无法解决报错问题,但是尝试默认安装的无配置文件部署mysql是可以正常创建,判断是由
配置文件引起的无法创建表问题,经过测试发现配置文件中innodb_page_size参数配置大小为8192,而默认配置大小
是16384,调整该参数至16384问题解决。
7.上述创建语句中外键索引所需字节大小为(120+200+200)*3=1560,但是为何page页改为16k就没问题 ,没有找到直观的证据,暂未可知(推测应该是页大小和索引行长度的关系,16k的页对应3072,8k的页对应1536)
11-20
11-19
11-20
11-20
11-20
11-19
11-20
11-20
11-19
11-20
11-19
11-19
11-19
11-19
11-19
11-19