我使用的navicat版本比较新,而要传输数据的目标数据库,版本比较老,这导致两个版本之间的字符集不同。


同样都是utf8mb4的字符集,查看新版本中建立的数据库,utf8mb4中支持有utf8mb4_cs_0900_ai_ci等规则。但是这些规则在老版本navicat中建立的数据库内是不支持的。


因此,如果新版本使用了老版本不支持的字符集,直接进行数据传输,就会出现“COLLATION 'utf8mb4_cs_0900_ai_ci' is not valid for CHARACTER SET 'utf8mb4'” 的报错
解决方式
1、在新版本的navicat上建立的数据库内,选择数据传输,导出完整插入语句的sql文件到本地
2、手动修改导出的sql文件,替换所有的'utf8mb4_cs_0900_ai_ci' 为‘utf8mb4_bin’
3、选择目标数据库→运行mysql文件,执行修改过的sql文件,即可进行数据的插入。
到此,即可完成新版本到旧版本的数据库的迁移,但是这个方法只适用于表格较少的应急的情况
网友评论