You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mysqldump导出中文乱码:【国家】变为【鍥藉】的原因排查

问题排查:MySQL mysqldump导出中文注释乱码(UTF-16编码异常)

核心原因分析

  1. Windows Shell重定向的编码强制转换
    Windows CMD/PowerShell的重定向操作(>)会自动将程序输出的编码转换为系统默认的Unicode编码(UTF-16 LE)。mysqldump本身输出的是UTF-8格式的SQL内容,被Shell强制转码为UTF-16后,原本的UTF-8中文字节被错误解析,就出现了国家变鍥藉这类乱码。

  2. 字符集参数缺失导致的编码不匹配
    虽然数据库层面的character_set_*变量显示为utf8,但你的表实际使用utf8mb4_unicode_520_ci字符集。mysqldump导出时未显式指定--default-character-set=utf8mb4,导致导出过程中出现字符集转换偏差,加上Windows终端编码的干扰,最终加剧乱码问题。

  3. 文件编码识别冲突
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 03:08:08