Mysqldump导出中文乱码:【国家】变为【鍥藉】的原因排查
问题排查:MySQL mysqldump导出中文注释乱码(UTF-16编码异常)
核心原因分析
Windows Shell重定向的编码强制转换
Windows CMD/PowerShell的重定向操作(>)会自动将程序输出的编码转换为系统默认的Unicode编码(UTF-16 LE)。mysqldump本身输出的是UTF-8格式的SQL内容,被Shell强制转码为UTF-16后,原本的UTF-8中文字节被错误解析,就出现了国家变鍥藉这类乱码。字符集参数缺失导致的编码不匹配
虽然数据库层面的character_set_*变量显示为utf8,但你的表实际使用utf8mb4_unicode_520_ci字符集。mysqldump导出时未显式指定--default-character-set=utf8mb4,导致导出过程中出现字符集转换偏差,加上Windows终端编码的干扰,最终加剧乱码问题。文件编码识别冲突
Notepad++显示文件为UTF-16 BE BOM,而file命令识别为UTF-16 LE,说明文件编码本身存在BOM或字节序的混乱,这会导致文本编辑器解析时进一步出错,放大乱码现象。
解决方法
1. 用mysqldump原生参数绕开Shell重定向
直接使用--result-file参数让mysqldump直接写入文件,避免Shell的编码转换:
mysqldump -uxx -p123 --default-character-set=utf8mb4 db --result-file=db.sql
--default-character-set=utf8mb4确保和表的字符集一致,彻底避免编码转换错误。
2. 切换终端编码为UTF-8后再导出
- 在CMD中先切换编码:
chcp 65001 mysqldump -uxx -p123 --default-character-set=utf8mb4 db > db.sql - 在PowerShell中设置输出编码:
$OutputEncoding = [Console]::OutputEncoding = [System.Text.UTF8Encoding]::new() mysqldump -uxx -p123 --default-character-set=utf8mb4 db > db.sql
3. 修复已导出的乱码文件
如果已经生成乱码文件,可尝试用Notepad++打开,依次选择编码→转为UTF-8无BOM后保存。但这种方法无法保证100%恢复,优先推荐重新导出。
内容的提问来源于stack exchange,提问作者djy
相关产品推荐
相关产品推荐

