我正在尝试导出我们非常大的 MySQL 数据库(1.6GB - 主要是 BLOB)并导入到新服务器中。我已经解决了大部分问题,最终完成了导入,没有任何错误。使用 MySQL 查询浏览器,我在一张带有 BLOB 图像的表上运行查询并将一个保存到磁盘(使用查询浏览器中的保存图标)。当我尝试打开文件时,我收到“无效的图像格式”错误。哦哦。
使用查询浏览器,我检查了源数据库和最近导入的新数据库上的值。我认为价值观不同。它可能只是编码问题或其他东西。这是我看到的:
源(有效数据)服务器:
FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 60
00 60 00 00 FF DB 00 43 00 08 06 06 07 06 05 08
and so on...
新服务器:
C3 BF C3 98 C3 BF C3 A0 00 10 4A 46 49 46 00 01
01 01 00 60 00 60 00 00 C3 BF C3 9B 00 43 00 08
and so on...
在此示例中,在我的新手眼中,“新”服务器上的数据前面有 3 个字节的额外数据。
然后我使用010 编辑器检查了 sql 转储文件。我找到了这个特定示例的行,这就是我所看到的:
FF D8 FF E0 5C 30 10 4A 46 49 46 5C 30 01 01 01
5C 30 60 5C 30 60 5C 30 5C 30 FF DB 5C 30 43 5C
30 08 06 06 07 06 05 08 and so on...
现在我已经过头了。我看到了模式,我注意到十六进制对 5C 30 看起来与 00 相同,但我不明白为什么。在这一点上,我有一个源服务器即将被擦除,而一个新的服务器恐怕已经导入了损坏的数据。我希望这是某种编码问题,可以通过在 MySQL 中设置全局变量来解决,但我真的不知道。
我还应该提到,当我从源(工作)服务器和新(损坏)服务器保存文件时,损坏文件的文件大小大约大 40%。
我检查了两台服务器上的字符集变量:
SHOW VARIABLES LIKE '%char%'
源服务器:
character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
新服务器:
character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
他们是一样的。