0

有一个 MySQL 备份文件,它是一个巨大的文件 - 大约 3 GB。有一个表具有存储 JPEG 图像数据的 LONGBLOB 列。

如果从 MySQL Workbench - Data Import/Restore 完成,文件导入成功。

我需要打开这个文件并提取前几行(大约两行带有图像数据的表的 INSERT),以便我可以测试另一个程序是否可以将此数据导入另一个 MySQL 数据库。

我尝试使用 EmEditor 打开文件(它擅长打开大文件),然后仅将脚本的一个 Insert 语句复制/粘贴到一个新文件中(直到第 25 行,因为有问题的表是第一个表备份脚本),然后将所选内容粘贴到新文件中。

问题来了:

然而,这弄乱了编码(即使我保存为 utf8)。当我尝试将这个新文件(再次使用 MySQL Workbench)导入(恢复)到 MySQL 数据库中时,我意识到这一点,恢复继续进行而没有错误,但是 blob 列中的 JPEG 图像现在被破坏/损坏。

我的猜测是原始文件和新文件之间的编码不同。

EmEditor 不显示原始文件的编码,有一个检测选项,它检测为 'UTF8 Unsigned'。但是保存时我将它保存为UTF8。我也尝试另存为 ANSI、ISO8859(Windows 默认)等,但每次都得到相同的结果。

您对这个特定问题有任何解决方案吗?即我只想剪切大备份文件的前几行并保存到一个新文件中,保持编码相同,这样图像(blob)就不会改变。有什么方法可以用 EmEditor 完成(即我的方法是否错误[即剪切粘贴]?)是否有任何专门的软件可以做到这一点?我如何诊断这里出了什么问题?

感谢您的任何回复。

4

2 回答 2

0

这弄乱了编码(即使我保存为 utf8)

UTF-8 不是任意二进制数据的好选择。有许多高字节序列在 UTF-8 中无效,因此您将在加载-更改-保存过程中的某个时刻破坏它们。

如果使用将每个字节映射到唯一字符的编码加载文件,并使用相同的编码重新保存文件,则应保留原始内容 (*)。ISO-8859-1 是通常为此目的选择的编码,因为它只是将每个字节 0..0xFF 映射到具有相同编号的 Unicode 代码点。

(*:假设编辑器对于其他棘手的点(如 null、\n/\r和其他控制字符)是二进制安全的……我相信 EmEditor 可以。)

于 2011-07-12T21:28:09.863 回答
0

在 EmEditor 中打开原始文件时,尝试将编码选择为二进制(ASCII 视图)。正如 bobince 所说,二进制(ASCII 视图)将每个字节映射到一个唯一字符,并在您保存文件时保留该字符。我认为这应该可以解决您的问题。

于 2011-08-01T21:54:09.723 回答