首页 > 数据库 > Mysql > 将MYSQL8.0数据DUMP的SQL文件导入到MYSQL5.7及以下版本解决方法

将MYSQL8.0数据DUMP的SQL文件导入到MYSQL5.7及以下版本解决方法

Mysql

Mysql8.0的字符集和排序规则较Mysql5.7有改动

默认编码为 utf8mb4
默认排序规则为 utf8mb4_0900_ai_ci

因此打开.sql文件 使用notpad++等软件去全局替换:

如果导入的mysql版本低于8.0最简单的就是把编码utf8mb4全部改成utf8,不支持的utf8mb4的排序规则都改成utf8_general_ci

utf8mb4_0900_ai_ci 替换为 utf8_general_ci(utf8mb4_0900_ai_ci排序规则8.0之前的版本没有)
utf8mb4 替换为 utf8(这里顺带把所有utf8mb4的排序规则都改成utf8的排序规则了.例如utf8mb4_general_ci变成utf8_general_ci)

个人理解就是把现版本Mysql库里没有的编码和编码排序改成支持的编码和编码排序就行了.

sql文件太大可以用sed

替换前一定要注意,如果库的内容(非库表构造语句)里有相关字符会被一起替换,比如mysql教程类文章,还有就是在utf8mb4中emoji表情(部分特殊符号)是4字节,替换utf8(3字节)不知会不会导入时产生新的报错问题.

相关阅读:https://cloud.tencent.com/developer/article/1833766

看到其他文章说因为最早utf8是6字节,mysql最早也是按6字节来储存数据,但可能为了减少储存加快运行速度,强制把6改成3字节(这个修改提交没有写理由,也可能是更换代码平台丢失以前的版本更新记录),比utf8新标准4字节就早了1年,由于大量用户已经使用缩减的utf8(utf8mb3),修改utf8到4字节新标准会让用户重构数据(可能直接玩完),所以用了新名字的字符集编码utf8mb4,所以utf8mb4才是标准的utf8格式.这个更新被一句话说明带过.可能是官方太尴尬了🙈

还有就是mysql版本不同,处理方法也可以不一样,比如mysql5.7其实是有utf8mb4编码的,只是对应的utf8mb4默认排序和mysql8.0不同.

对于低于mysql5.5.3的版本:(只有一种utf8编码)

编码:utf8 -----------> 对应的默认排序规则 utf8_general_ci

对于高于mysql5.5.3的版本低于mysql8.0版本:(可以不修改编码utf8mb4到utf8,只修改排序规则)

编码 utf8  ------------>对应的默认排序规则 utf8_general_ci
编码 utf8mb4 ------------>对应的默认排序规则 utf8mb4_0900_ai_ci 
编码有两种选择,对应的规则有多种选择

对于高于mysql8版本:

编码 utf8  ------------>对应的默认排序规则 utf8_general_ci
编码 utf8mb4 ------------>对应的默认排序规则 utf8mb4_0900_ai_ci
编码有两种选择,对应的规则有多种选择

参考:https://blog.csdn.net/gakki_200/article/details/107847837

顺便附一个mysql5.7和mysql8.0的支持编码排序表

Mysql5.7:

Mysql8.0: