MySQL导入提示COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'utf8mb4'怎么解决
MySQL导入报错
COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'utf8mb4' 解决方案 该报错的核心原因是导出的SQL文件中部分表/字段使用了utf8字符集对应的utf8_general_ci排序规则,而目标数据库默认字符集为utf8mb4,两类字符集的排序规则不兼容。可根据你的场景选择以下任意一种方案解决:
方案1:直接修改导出的SQL文件(推荐,兼容性最高)
- 用任意文本编辑器打开待导入的SQL文件
- 全局替换所有
utf8_general_ci为utf8mb4_general_ci - 再全局替换所有
CHARSET=utf8为CHARSET=utf8mb4 - 保存文件后重新执行导入操作即可
方案2:导入时强制匹配原字符集(无需修改SQL文件)
如果不想改动导出的原始文件,可在命令行导入时指定字符集参数:
mysql -u 数据库用户名 -p 目标数据库名 --default-character-set=utf8 < 待导入SQL文件路径.sql
如果使用phpMyAdmin等可视化工具导入,可在导入设置页的「字符集文件」下拉选项中选择utf8,再上传文件导入即可。
方案3:先调整目标库配置导入,后续统一转换字符集
如果后续需要将数据库切换为utf8mb4,可按以下步骤操作:
- 导入前先修改目标库默认字符集,和导出文件匹配:
ALTER DATABASE 目标数据库名 CHARACTER SET utf8 COLLATE utf8_general_ci;
- 正常执行导入操作,确认数据无误后,执行以下步骤切换为utf8mb4:
- 修改库默认字符集配置:
ALTER DATABASE 目标数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
- 生成所有表的字符集转换语句:
SELECT CONCAT('ALTER TABLE ', table_name, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;') FROM information_schema.tables WHERE table_schema='目标数据库名';
- 执行上一步查询得到的所有ALTER语句,即可完成全库字符集切换。
注意事项
- 所有操作前请备份原始SQL导出文件以及目标库的现有数据,避免操作失误导致数据丢失
- 如果业务需要存储emoji等4字节长度的特殊字符,必须使用utf8mb4字符集,不要长期使用utf8,否则会出现存储失败的问题
内容的提问来源于stack exchange,提问作者raffaele parlato
相关产品推荐
相关产品推荐

