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

目录

场景:

说明:

 疑问:

 解决:

 验证:


场景:

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

说明:

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

mysql数据迁移报错Specified key was too long; max key length is 767 bytes_第1张图片

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

mysql数据迁移报错Specified key was too long; max key length is 767 bytes_第2张图片

注:直接在目标库中创建提示报错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'

你可能感兴趣的:(mysql,mysql,数据库)