当我尝试按如下方式完全转储数据库时:
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。 那么问题可能是什么呢?我很确定这是一个愚蠢的问题,但我没有提出这些想法。我非常感谢你的帮助。
答案 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/
然后保存文件