mysql8.0.17备份数据库到mysql5.7.26的There was error(s) while executing the queries问题解决(数据库高版本向低版本数据迁移解决)

问题背景

今天要将本地的mysql数据库导入到linux中的mysql中,其中,本地mysql数据库的版本是8.0.17,linux中的
mysql版本为5.7.26。但是在将mysql8.0.17导出的sql文件导入到mysql5.7.26时报了如图的错误
mysql8.0.17备份数据库到mysql5.7.26的There was error(s) while executing the queries问题解决(数据库高版本向低版本数据迁移解决)_第1张图片

问题分析(不想看分析可以直接跳到问题解决)

点击“打开错误文件”,滑动到错误文件的最下面
红箭头这个地方就是错误信息,报错翻译为:错误代码:1273 -未知排序:‘utf8mb4_0900_ai_ci’,发生错误的地方就是蓝箭头指向的地方。
mysql8.0.17备份数据库到mysql5.7.26的There was error(s) while executing the queries问题解决(数据库高版本向低版本数据迁移解决)_第2张图片

使用NotePad++软件打开mysql8.0.17的sql文件

mysql8.0.17备份数据库到mysql5.7.26的There was error(s) while executing the queries问题解决(数据库高版本向低版本数据迁移解决)_第3张图片
从mysql8.0.17的sql文件中可以看出,创建数据库travel时mysql使用的编码为utf8mb4,对应的默认排序规则为utf8mb4_0900_ai_ci,并且创建表时编码和默认排序规则也是如此。

结合错误信息 : " 错误代码:1273 -未知排序:‘utf8mb4_0900_ai_ci’ " 来看,可以初步判断错误原因是mysql5.7.26中并没有mysql8.0.17中的排序规则utf8mb4_0900_ai_ci

为了验证猜想,使用 SHOW COLLATION; 命令查看mysql8.0.17和mysql5.7.26它们支持的排序规则

1、mysql5.7.26支持的规则
mysql8.0.17备份数据库到mysql5.7.26的There was error(s) while executing the queries问题解决(数据库高版本向低版本数据迁移解决)_第4张图片

从mysql5.7.26支持的规则可以看出规则中并没有utf8mb4_0900_ai_ci,并且当编码为utf8mb4时mysql5.7.26对应的默认排序规则为utf8mb4_general_ci ,让我们再继续看下去。

2、mysql8.0.17支持的规则
mysql8.0.17备份数据库到mysql5.7.26的There was error(s) while executing the queries问题解决(数据库高版本向低版本数据迁移解决)_第5张图片
mysql8.0.17支持的规则中有utf8mb4_0900_ai_ci,并且当编码为utf8mb4时对应默认规则也是utf8mb4_0900_ai_ci

看来我们的猜想是对的,发生错误的主要原因就是因为mysql5.7.26中并没有mysql8.0.17中的排序规则utf8mb4_0900_ai_ci,因此在导入时发生了报错。因此,解决问题的思路也清晰明了了,只需要将mysql8.0.17的sql文件中的所有 utf8mb4_0900_ai_ci 规则替换为 utf8mb4_general_ci 规则,再将sql文件导入到mysql5.7.26中就可以了

问题解决(此解决方法只针对5.5.3以上的版本,低于5.5.3版本的解决方法请往下看)

从分析中可以得知发生错误的主要原因就是因为mysql5.7.26中并没有mysql8.0.17中的排序规则utf8mb4_0900_ai_ci,解决方法为:将mysql8.0.17的sql文件中的所有 utf8mb4_0900_ai_ci 规则替换为 utf8mb4_general_ci 规则

使用NotePad++软件可以轻松做到
1、使用NotePad++软件打开我们要导入的sql文件,进入后按 ctrl+f 打开此界面

mysql8.0.17备份数据库到mysql5.7.26的There was error(s) while executing the queries问题解决(数据库高版本向低版本数据迁移解决)_第6张图片
2、点击替换,输入我们要替换的utf8mb4_0900_ai_ci 全部替换为 utf8mb4_general_ci
mysql8.0.17备份数据库到mysql5.7.26的There was error(s) while executing the queries问题解决(数据库高版本向低版本数据迁移解决)_第7张图片
3、成功修改所有规则
mysql8.0.17备份数据库到mysql5.7.26的There was error(s) while executing the queries问题解决(数据库高版本向低版本数据迁移解决)_第8张图片

4、保存并退出,使用SQLyog导入sql文件
mysql8.0.17备份数据库到mysql5.7.26的There was error(s) while executing the queries问题解决(数据库高版本向低版本数据迁移解决)_第9张图片

右键travel数据库,选择导入中的执行sql脚本,导入sql文件,成功导入。
mysql8.0.17备份数据库到mysql5.7.26的There was error(s) while executing the queries问题解决(数据库高版本向低版本数据迁移解决)_第10张图片
数据库中也成功导入了数据
mysql8.0.17备份数据库到mysql5.7.26的There was error(s) while executing the queries问题解决(数据库高版本向低版本数据迁移解决)_第11张图片

低于mysql5.5.3的版本的解决方法

MySQL在5.5.3之后增加了这个utf8mb4的编码,也就意味着低于5.5.3版本的mysql是不能使用utf8mb4编码的,只能使用utf8编码。

因此解决方法为:将mysql8.0.17的sql文件中的所有 utf8mb4 替换为 utf8 ,utf8mb4_0900_ai_ci 替换为 utf8_general_ci 。

问题总结

当将数据库从高版本向低版本迁移时,要考虑的主要是:要导入的数据库在低版本中是否存在对应的编码以及规则

mysql的每一个版本都有它自己的默认编码以及默认的排序规则。编码以及规则都可以更改,当不指定编码或者规则时,就会使用默认的编码与规则。

对于低于mysql5.5.3的版本:
编码:utf8 -----------> 对应的默认排序规则 utf8_general_ci

对于高于mysql5.5.3的版本低于mysql8.0版本:
编码 utf8 ------------>对应的默认排序规则 utf8_general_ci
编码 utf8mb4 ------------>对应的默认排序规则 utf8mb4_general_ci

编码有两种选择,对应的规则有多种选择

对于高于mysql8版本:
编码 utf8 ------------>对应的默认排序规则 utf8_general_ci
编码 utf8mb4 ------------>对应的默认排序规则 utf8mb4_0900_ai_ci

编码有两种选择,对应的规则有多种选择

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