mysql数据迁移报错Specified key was too long; max key length is 767 bytes

发布时间:2024年01月18日

目录

场景:

说明:

?疑问:

?解决:

?验证:


场景:

线上项目支持的过程中遇到mysql库表结构和数据由A库迁移到B库上提示Specified key was too long; max key length is 767 bytes报错,第一次遇到特此记录一下。

说明:

源库和目标库的版本一样。

从源库中导出单个一个表结构

注:直接在目标库中创建提示报错Specified key was too long; max key length is 767 bytes然而将primary key('seq_code','seq_key')去掉就创建成功了,因此定位到主键这里报错了

?疑问:

mysql版本一样,相同的表结构为什么在源库中能创建,而在目标库中无法创建呢??

解决:

网上搜了Mysql InnoDB引擎表的索引,默认索引键前缀限制为767字节,当你建的索引长度为varchar类型时候,使用默认的varchar(255),而你的编码又字符集又是utf8mb4,4*255 > 767,显然太大,所以报错。

????解决办法:

????????1.可以设置为:767/4大小以内;

????????2.可以调整 启用innodb_large_prefix,加大索引键长度限制。

验证:

show variables like '%innodb_large_prefix

源库的innodb_large_prefix变量的开关是启用的,而目标库的开关是关闭的,将目标库该属性设置成ON即可,由于是线上环境,执行无权限,让有权限的人设置一下即可。

set GLOBAL?innodb_large_prefix = 'ON'

文章来源:https://blog.csdn.net/qq_38423256/article/details/135666368
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。