我正在开发一个使用旧数据库的网站,该数据库在外部 MySQL 4.1 服务器(服务器 A)上运行。数据库使用 latin1_swedish_ci 排序规则,表和列也是如此。有一台运行 MySQL 5 的新服务器 B 来替换服务器 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
将 latin1 替换为 utf-8
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 命令。有人知道我的问题的解决方案吗?
最佳答案
最好将其加载为 latin1,然后修复问题。
但是,这并不简单,因为需要考虑多种场景。看到这个:http://mysql.rjweb.org/doc.php/charcoll#fixes_for_various_cases
请特别注意,至少有 2 种不同的方法可以执行 ALTER
。如果选错了,数据会变得乱码更严重。
要查看您拥有的内容,请使用它作为数据示例:
SELECT col, HEX(col) FROM ... WHERE ...
关于mysql - 导出latin1数据库并导入为utf8/转换为utf8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58112297/