修复 mysqldump 导出中文乱码的问题

Posted on Sat, 01 Mar 2025 11:17:48 +0800 by LiangMingJian


BUG 描述

在 windows powershell 中使用 mysqldump -h 127.0.0.1 --default-character-set=utf8 -uroot -proot xxx > xxx.sql 导出数据库时,导出的文件打开查看会看到中文乱码的问题,如果查看编码,会发现编码是 UTF16,而不是 UTF8。

Resolution

这个问题的出现不是因为 mysqldump 的异常,而是 windows powershell 的问题。

Windows PowerShell 输出重定向命令 > 的文件编码默认是 UTF-16 (LE)。因此,如果我们使用上述命令备份数据库,会因为重定向,导致中文的编码异常。

Note A dump made using PowerShell on Windows with output redirection creates a file that has UTF-16 encoding:

mysqldump [options] > dump.sql

However, UTF-16 is not permitted as a connection character set (see Impermissible Client Character Sets), so the dump file cannot be loaded correctly. To work around this issue, use the –result-file option, which creates the output in ASCII format:

mysqldump [options] –result-file=dump.sql

根据 Mysql 官网的上述解释,可以使用 --result-file 来指定导出文件,而不是使用输出重定向。

mysqldump -h 127.0.0.1 --default-character-set=utf8 --result-file=D:\xxx.sql -uroot -proot xxx