【发布时间】:2021-02-12 16:29:08
【问题描述】:
我有一个数据库(MS SQL 2019),客户在其中将文件保存到某些记录(项目图像),不幸的是,文件名没有与数据一起保存,因此文件扩展名未知。为了在需要时恢复这些文件,我们编写了一个检测器,它根据标头确定扩展名。
现在奇怪的是:我们在开发环境中有生产服务器的备份,并且大约 85% 的文件的标头返回的字节与生产服务器上的不同。但更重要的是:如果我还是将数据导出到一个文件中,并为两个文件提供相同的扩展名 (jpg),它们似乎都很好。 - 没有损坏的数据。
我们基于此列表构建了检测器:https://en.wikipedia.org/wiki/List_of_file_signatures
生产服务器上的标头不在该列表中(其A0 B9 A0 22),我真的很好奇发生了什么。我可以添加标题,但我想知道这是怎么发生的。
感谢您的意见
编辑:显然,改变的不是数据,而是基于服务器配置的解释层。我还没有找到对这种现象的正确解释。但是我现在用管理工作室测试了记录,数据库记录具有相同的值。很抱歉打扰您。
【问题讨论】:
-
如果图像存储在 varbinary(MAX) 列中并且使用 T-SQL RESTORE 命令恢复数据库,则列中的字节必须与生产服务器相同,除非随后更改了值在任一侧。如果您通过其他方式恢复图像数据,我会将您的注意力集中在那里。
-
@DanGuzman 数据库已使用 T-SQL 还原进行还原。但是文件存储在数据类型 [image] 的列中
-
虽然已弃用,但我希望
image的工作方式与varbinary(MAX)类似。备份/恢复在整个 8K 页面而不是单个行/列上运行。还原后二进制列值应保持不变。我无法解释您的观察结果,除非在备份后在生产中更改了这些值。 -
@DanGuzman 非常感谢您抽出宝贵时间。正如我在最初的问题中添加的那样。事实证明,数据并没有在数据库中更改,而是在解释层中。
标签: sql-server file mime-types