Mysqldump使用损坏的编码创建转储

时间:2015-07-23 16:55:32

标签: mysql utf-8 mysqldump

当我尝试按如下方式完全转储数据库时:

mysql --default-character-set=utf8 -uUSER -p database -r output.sql

它创建了一个UTF-8文件,但所有国际数据(Chineese,西班牙语,俄语)都被破坏如下(它是转储的俄语部分):

(1,'Ð<9e> наÑ<81>')

但是,当我尝试转储一个表时,它工作正常: mysql --default-character-set=utf8 -uUSER -p database table_name -r output.sql

我不太清楚导致问题的原因是因为所有可能的变量都设置为UTF-8:

show variables like "collation_database";
+--------------------+-----------------+
| Variable_name      | Value           |
+--------------------+-----------------+
| collation_database | utf8_general_ci | 
+--------------------+-----------------+

show variables like "character_set_database";
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| character_set_database | utf8  | 
+------------------------+-------+

所有表格也具有相同的字符集/排序规则。 my.cnf中有以下设置

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

最后,locale也设置为utf-8。 那么问题可能是什么呢?我很确定这是一个愚蠢的问题,但我没有提出这些想法。我非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

mysqldump -uusername -ppassword -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql

然后在shell中复制和编辑

shell> cp dump.sql dump-fixed.sql
shell> vi or vim dump-fixed.sql
:%s/DEFAULT CHARACTER SET latin1/DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci/
:%s/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/

然后保存文件