宝塔导出网站mysql5.7的sql数据库备份文件无法还原迁移到其它机器,错误码1071 - Specified key was too long; max key length is 767 bytes,utf8mb4的坑
宝塔导出网站mysql5.7的sql数据库备份文件无法还原迁移到其它机器,错误码1071 - Specified key was too long; max key length is 767 bytes,utf8mb4的坑错误
SQL 查询:
CREATETABLE`wp_aioseo_crawl_cleanup_blocked_args`(
`id`BIGINT(20)UNSIGNEDNOTNULLAUTO_INCREMENT,
`key`TEXTCOLLATEutf8mb4_unicode_520_ci,
`value`TEXTCOLLATEutf8mb4_unicode_520_ci,
`key_value_hash`VARCHAR(40)COLLATEutf8mb4_unicode_520_ciDEFAULTNULL,
`regex`VARCHAR(255)COLLATEutf8mb4_unicode_520_ciDEFAULTNULL,
`hits`INT(20)NOTNULLDEFAULT'0',
`created`DATETIMENOTNULL,
`updated`DATETIMENOTNULL,
PRIMARYKEY(`id`),
UNIQUEKEY`ndx_aioseo_crawl_cleanup_blocked_args_key_value_hash`(`key_value_hash`),
UNIQUEKEY`ndx_aioseo_crawl_cleanup_blocked_args_regex`(`regex`))ENGINE=INNODBDEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_520_ci;
MySQL 返回:
#1071 - Specified key was too long; max key length is 767 bytes
原因:MySQL 索引只支持767个字节,但是VARCHAR却错误的赋予了数值255,由于每个utf8mb4需要占用4字节,所以最大值应当为191
解决办法1,推荐
通过记事本打开sql编辑或者使用sqlitestudio进行编辑都可以,数值改成191后恢复正常
解决办法2,此方法比较复杂而且应用场景很少,这里不做过多的介绍
想要支持更长的索引,那么创建表的时候需要使用row_format=DYNAMIC
这个问题是迁移导入到mysql5.6时出现
解决方法1:修改regex结构的VARCHAR(255)为VARCHAR(191)
解决方法2:升级mysql为5.7
页:
[1]