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

标签 mysql encoding utf-8 iso-8859-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. 将 latin1 替换为 utf-8 sed -e 's/CHARSET\=latin1/CHARSET\=utf8\ COLLATE\=utf8_general_ci/g' db_a.sql > db_a2.sql

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

  5. 导入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/

相关文章:

mysql - mysql cpu占用率高

mysql - 如何使用 Rails Controller 页面将数据插入具有多对多关系的联接表

java - 将传入字符串的 unicode 表示形式转换为 UTF-8?

python - 将包含 utf-8 编码的字节串和代码点的字符串转换为 utf-8 编码的字符串

python - 如何使用Scrapy编码

mysql - Access : Search and Update Query

multithreading - 在 SLURM 环境中运行 FFMPEG 多线程

c++ - 无法使用 FFmpeg 编码单帧 h264 (.mp4) 视频。不存在视频流

.net - 使用 System.Text.UnicodeEncoding.Unicode.GetString(byte[]) 反向编码字节数组时间歇性失败

mysql - MsSQL NEWID 是否像 MySQL Rand() 一样糟糕