我正在一个使用旧数据库的网站上工作,该网站在外部MySQL 4.1服务器(服务器A)上运行。数据库使用latin1_swedish_ci排序规则,表和列也是如此。有一个新的服务器B,该服务器运行MySQL 5来替换服务器A。编码应为utf8_unicode_ci。
我在服务器A上导出数据库:
mysqldump -u root -p --opt --quote-names --skip-set-charset --default-character-set=latin1 db_a -r db_a.sql
通过scp将db_a.sql从服务器A传输到服务器B
用utf-8替换latin1
sed -e 's/CHARSET\=latin1/CHARSET\=utf8\ COLLATE\=utf8_general_ci/g' db_a.sql > db_a2.sql
将文件转换为utf-8
iconv -f latin1 -t utf8 db_a2.sql > db_a3.sql
导入db_a3.sql
在phpmyadmin中,所有内容均正确打印。但是新的客户端应用程序在文本列中显示了工件。
我尝试了上述步骤的不同变体,但没有成功。包括导入为latin1并使用mysql convert命令。有人知道我的问题的解决方案吗?
答案 0 :(得分:0)
最好是将其加载为latin1,然后然后修复问题。
但是,这并非一帆风顺,因为要考虑多种情况。看到这个:http://mysql.rjweb.org/doc.php/charcoll#fixes_for_various_cases
特别要注意的是,至少有2种不同的方式来做ALTER
。如果选择错误的数据,数据将变得更乱码。
要查看所拥有的内容,请使用它作为数据样本:
SELECT col, HEX(col) FROM ... WHERE ...