MySQL dump-restore 用 3Fh 替换字符

MySQL dump-restore 用 3Fh 替换字符

带有 Mysql 和 make.conf 的 FreeBSD 服务器

.if ${.CURDIR} == ${PORTSDIR}/databases/mysql50-server
WITH_CHARSET=cp1251
WITH_COLLATION=cp1251_bin
BUILD_OPTIMIZED=yes
BUILD_STATIC=yes
.endif
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql50-client
WITH_CHARSET=cp1251
WITH_COLLATION=cp1251_bin
BUILD_OPTIMIZED=yes
.endif

我有这样的结构的mysql表

mysql> show create table phpbb_bt_torrents\G
*************************** 1. row ***************************
       Table: phpbb_bt_torrents
Create Table: CREATE TABLE `phpbb_bt_torrents` (
`info_hash` char(20) CHARACTER SET cp1251 COLLATE cp1251_bin NOT NULL DEFAULT '',
) ENGINE=InnoDB AUTO_INCREMENT=128511 DEFAULT CHARSET=cp1251

我晚上用mysqldump --quote-names --add-drop-table db>db.sql

如果我使用恢复备份mysql < db.sql 在同一台服务器上那么我得到的数据就不完全相同了,例如:

SELECT hex(info_hash) FROM phpbb_bt_torrents

8CB0701A0C8B7D97653888E8B959A6420AEC7679 变成 8CB0701A0C8B7D9765383楼恢复后 E8B959A6420AEC7679

A9986D2E961E1F407E74E9D18D811DDB702924F5 变成 A93楼6D2E961E1F407E74E9D18D811DDB702924F5 还原后

等等...我注意到只有 88h 和 98h 个字符损坏,但可能还有更多。

有没有办法可以备份并恢复数据而不造成损坏?

答案1

您可以尝试使用“mysqldump --opt ...”转储然后恢复它吗?

在同一台服务器上时不应该有区别,只是要确保这不能是某些用户特定的配置。

答案2

我已经开票了Bugs.MySQL.com

解决方法:

指定选项 --default-character-set=cp1251。但此解决方法不适用于混合字符集的测试用例

相关内容