导出latin1数据库并作为utf8导入/转换为utf8

问题描述 投票:0回答:1

我正在一个使用旧数据库的网站上工作,该网站在外部MySQL 4.1服务器(服务器A)上运行。数据库使用latin1_swedish_ci排序规则,表和列也是如此。有一个运行MySQL 5的新服务器B来替换服务器A。编码应为utf8_unicode_ci。

  1. 我在服务器A上导出数据库:mysqldump -u root -p --opt --quote-names --skip-set-charset --default-character-set=latin1 db_a -r db_a.sql

  2. 通过scp将db_a.sql从服务器A传输到服务器B

  3. 用utf-8替换latin1sed -e 's/CHARSET\=latin1/CHARSET\=utf8\ COLLATE\=utf8_general_ci/g' db_a.sql > db_a2.sql

  4. 将文件转换为utf-8iconv -f latin1 -t utf8 db_a2.sql > db_a3.sql

  5. 导入db_a3.sql

在phpmyadmin中,所有内容均正确打印。但是新的客户端应用程序在文本列中显示了工件。

我尝试了上述步骤的不同变体,但没有成功。包括导入为latin1并使用mysql convert命令。有人知道我的问题的解决方案吗?

mysql encoding utf-8 iso-8859-1
1个回答
0
投票

最好是将其加载为latin1,然后修复问题。

但是,这并不是简单明了,因为要考虑多种情​​况。看到此:http://mysql.rjweb.org/doc.php/charcoll#fixes_for_various_cases特别要注意的是,至少有2种不同的方法可以进行ALTER。如果您选择了错误的数据,数据将变得更乱码。

要查看所拥有的内容,请使用它作为数据样本:

SELECT col, HEX(col) FROM ... WHERE ...
© www.soinside.com 2019 - 2024. All rights reserved.