我正在尝试将一些数据从一台服务器导入到另一台服务器。但是当我这样做时,我遇到了字符集问题。
像 Goiânia 变成了 Goiâni,conceição 变成了 conceição
我的应用程序设置为使用 latin1 字符集
服务器 1:MySQL 字符集:UTF-8 Unicode(utf8)表排序规则:latin1_swedish_ci
服务器 2:MySQL 字符集:UTF-8 Unicode(utf8)表排序规则:latin1_swedish_ci
我用来从服务器 1 导出数据的命令 mysqldump -u root -p --default-character-set=iso-8859-1 database_name > db.sql
用于恢复到服务器 2 的命令 mysql -u root -p database_name < db.sql
答案1
根据 mysql 的版本,您可以使用以下任一方法:
--默认字符集=latin1
或者
--默认字符集=utf8
mysqldump 的某些版本中存在一个奇怪的错误,如果在命令行上指定 utf8,则会对已经编码为 utf8 的表进行双重编码,如果我没记错的话,这个问题在一年前或 5.0.51+ 中已修复。
如果您的字符集在表中正确指定,我认为您在进行转储时不需要使用默认字符集,因为它从表排序规则和字符集中获取。
答案2
仔细检查 中的排序规则和字符集server 1
。它看起来是一种不同的格式,即使您iso-8859-1
在导出时强制使用另一种格式(),这也行不通。在表和数据库等上仔细检查它。
如果这有帮助的话请告诉我。