今天在导入公司数据库sql到我们本地数据库的时候遇到了这个问题。找了半天最后还是解决了,现在给大家分享一下。
目录
第一种是:在我们导入数据的时候 把 "在每个运行中运行多个查询" 给去掉 这样操作会慢一些 但是数据不会冲突 不会让数据进行减少。
问题是这样的:
在网上查了一些方法:比较有用的有两种。
第一种是:在我们导入数据的时候 把 "在每个运行中运行多个查询" 给去掉 这样操作会慢一些 但是数据不会冲突 不会让数据进行减少。
后面这样试过之后发现会好一点。但是还是有一些数据缺失。
然后就又找到了第二种方法。
说第二种方法之前得明白这个问题具体的错误原因:
MySQL 8.0 版本加入了 utf8mb4_0900_ai_ci 的排序规则,低版本没有该排序规则因此出现了 1273 的报错。
解决:
1.将原来的数据导出为 .sql 文件导出的 sql 文件使用记事本或其他可编辑工具打开,然后按住Ctrl + H 以win10为例点替换按钮将 utf8mb4_0900_ai_ci 替换成5.7(5.6)版本可识别的 utf8mb4_general_ci 排序规则。
用过第二种方法之后再次导入sql,大体已经没有问题了,但是还是有一些小的数据缺失。
之后我又把第一种方法和第二种方法结合使用。缺失的文件就基本没有了。
最后虽然还是有一点点数据缺失,但是大体已经不影响了。
补充: 你可以启动项目 ,如果项目还是sql语法错误之类的那就说明还有数据缺失。然后你找到
缺失的那张表,把里面的varchar(255)修改为varchar(64),然后运行那张表sql。建立那张表。就成功解决了。
这个问题是因为071 - Specified key was too long; max key length is 767 bytes
意思就是“索引字段长度太长,超过了767bytes”。
查了一下 mysql的5.6或者5.7中varchar主键只支持不超过767个字节或者768/2=384个双字节 或者767/3=255个三字节的字段 而GBK是双字节的,UTF8是三字节的。
循环以往,剩下的表也这样处理,就没有问题。注:以上办法亲测有效!!!