今天要将本地的mysql数据库导入到linux中的mysql中,其中,本地mysql数据库的版本是8.0.17,linux中的
mysql版本为5.7.26。但是在将mysql8.0.17导出的sql文件导入到mysql5.7.26时报了如图的错误
点击“打开错误文件”,滑动到错误文件的最下面
红箭头这个地方就是错误信息,报错翻译为:错误代码:1273 -未知排序:‘utf8mb4_0900_ai_ci’,发生错误的地方就是蓝箭头指向的地方。
使用NotePad++软件打开mysql8.0.17的sql文件
从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它们支持的排序规则
从mysql5.7.26支持的规则可以看出规则中并没有utf8mb4_0900_ai_ci,并且当编码为utf8mb4时mysql5.7.26对应的默认排序规则为utf8mb4_general_ci ,让我们再继续看下去。
2、mysql8.0.17支持的规则
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中就可以了
从分析中可以得知发生错误的主要原因就是因为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 打开此界面
2、点击替换,输入我们要替换的utf8mb4_0900_ai_ci 全部替换为 utf8mb4_general_ci
3、成功修改所有规则
右键travel数据库,选择导入中的执行sql脚本,导入sql文件,成功导入。
数据库中也成功导入了数据
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
编码有两种选择,对应的规则有多种选择