我有 Percona XtraDB 5.6 服务器,数据库非常旧,字符集设置为 utf8,数据以不同的字符集(可能是 latin1)编码。
我尝试将数据库迁移到新的 Percona 8.0 服务器,但在导入 SQL 文件后,8.0 服务器上的所有变音符号都损坏了。我已通过对每个表中的每一列执行此查询来解决该问题:
UPDATE table SET col = convert(cast(convert(col using latin1) as binary) using UTF8) WHERE 1;
但是有一张表,其中二进制数据(特别是 GZIP 压缩数据)保存到 LONGTEXT 列中。此列中的数据在导入新服务器后总是会损坏。
这是我到目前为止所尝试的:
- 在转储之前将列类型更改为 LONGBLOB。
- 使用上述查询在列类型更改之前/之后转换数据。
这是我用来导出数据库的命令:
mysqldump --events --routines --triggers --add-drop-database --hex-blob --opt --skip-comments --single-transaction --skip-set-charset --default-character-set=utf8 --databases "%s" > db.sql
请注意“--hex-blob”选项仍然会导致二进制数据导出为字符串,而不是十六进制。