我看到这个问题已经 10 个月大了。我希望现在提供帮助还为时不晚。
DB2 和任何其他允许“Blob”数据类型的数据库都不会知道数据来自 .docx 文件,或者做任何会导致 Word 抱怨的事情。数据应该是您传递给它的任何数据的精确副本。
同样,Word 文档也不“知道”它已被复制到 BLOB 对象,然后又返回。
因此,几乎可以肯定,问题在于您在一个或两个程序中处理 BLOB 数据。
请运行您的第一个程序将 .docx 文件复制到数据库中,然后运行第二个程序将其读回。然后使用逐字节工具比较两个文件。一种方法是打开命令窗口并键入:
fc/b Doc1.docx Doc2.docx
如果您可以使用一些更好的比较工具,请务必使用它们……但请确保它查看每个字节,而不仅仅是可打印的字符。
显然,你会发现差异,否则 Microsoft Word 不会在第二个问题上给你错误,而第一个问题就很好。一旦你看到了不同之处,希望你会明白哪里出了问题以及如何解决它们。
几年前我遇到过类似的问题(我正在存储图形,但这是相同的基本问题)。事实证明,文档大小受到了影响——我将 8005 个字节存储到 BLOB 对象中,当我读回它时,我得到了 8192 个字节。NUL (0) 字节被附加到数据的末尾。
我当时的解决方案是在将 BLOB 数据写入数据库时在其末尾附加一个“X”。然后,当我读回它时,我会在数据中搜索最后一个“X”并将其连同其后的任何数据一起删除。这样,我可以恢复原始数据。我应该做的是将数据长度与 BLOB 数据一起存储在数据库中。然后您可以将文件截断为该大小,从而消除损坏。
如果附加的 NUL 字节不是您的问题,那么您需要做其他事情来解决问题。但是,在您知道发生了什么变化之前,您不会有任何线索。有什么事情发生了。