关于Windows使用mysqldump备份MySQL数据库(和数据表)出现乱码的解决方案
问题描述
- 在使用
mysqldump
命令备份数据表时,若里面存在中文,则中文部分会变成乱码,无法导入到其他MySQL数据库中。 - 如下是使用命令
mysqldump -u root -p myDatabase> backup.sql
(如果备份的是数据表则需要在数据库后面指定表)备份整个myDatabase数据库后打开backup.sql
出现的乱码:
问题原因
- 在Windows中使用Power Shell终端进行重定向导入时,定向操作可能会默认使用UTF-16编码格式来保存输出的文件,UTF-16与MySQL通常使用的UTF-8编码或其他编码格式不兼容,导致当你尝试将这样的文件加载到MySQL数据库中时出现乱码。
- 如下是导入到Linux MySQL时出现的问题:
ERROR: ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expected. Query: '��-'.
解决办法
- 在导出的时候加入
--result-file
参数,mysqldump会以正确的格式来写入文件,如下:
mysqldump -u root -p myDatabase --result-file=backup.sql # 备份数据库
mysqldump -u root -p myDatabase myTable --result-file=backup.sql # 备份数据表
- 之后使用
mysql -u root -p myDatabase < backup.sql
来导入到新的数据库中,就不会出现上面的问题。