上一篇
场景还原:
凌晨3点,你喝着第三杯咖啡☕,正准备将测试环境的MySQL数据迁移到生产服务器,突然终端弹出血红报错:
ERROR 1273 (HY000): Unknown collation: 'utf8mb4_0900_ai_ci' ERROR 1115 (42000): Unknown character set: 'utf16le'
手里的咖啡突然不香了…别慌!这篇指南能让你10分钟内搞定问题!
根本原因是数据库版本差异:
常见触发场景:
📌 适用场景:只有个别不支持的字符集/排序规则
-- 用文本编辑器全局替换(示例) utf8mb4_0900_ai_ci → utf8mb4_general_ci utf16le → utf8mb4
💡 技巧:用VS Code的「正则替换」批量处理
COLLATE=utf8mb4_\w+ → COLLATE=utf8mb4_general_ci
使用mysqldump
时添加参数:
mysqldump --default-character-set=utf8mb4 \ --skip-set-charset \ --column-statistics=0 \ db_name > backup.sql
关键参数说明:
--skip-set-charset
:不写入SET NAMES
语句 --column-statistics=0
:避免MySQL 8.0+的统计信息报错 在导入前执行:
-- 将不支持的字符集映射到已知字符集 SET @@global.collation_server = 'utf8mb4_general_ci'; SET @@global.character_set_server = 'utf8mb4';
⚠️ 注意:这会影响后续新建表的默认配置
SHOW CHARACTER SET; -- 查看所有字符集 SHOW COLLATION; -- 查看所有排序规则
字符集/排序规则 | MySQL 5.7 | MySQL 8.0 | MariaDB 10.6 |
---|---|---|---|
utf8mb4_0900_ai_ci | |||
utf8mb4_unicode_520_ci | |||
utf16le |
mysqlcheck --all-databases
检查兼容性 如果条件允许,升级目标数据库版本!MySQL 5.7已于2023年停止官方支持,新版本对Unicode的支持更完善(而且性能提升超多🚀)。
遇到其他奇葩字符集问题?试试这个万能命令:
iconv -f ORIGINAL_CHARSET -t UTF-8 backup.sql > fixed_backup.sql
本文由 烟冰夏 于2025-08-02发表在【云服务器提供商】,文中图片由(烟冰夏)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/517081.html
发表评论