Sql server 使用CFDUMP查看时二进制数据不同

Sql server 使用CFDUMP查看时二进制数据不同,sql-server,coldfusion,Sql Server,Coldfusion,我有一个SQL Server数据库,该数据库有一个包含varbinary(256)类型字段的表 当我通过MMS中的查询查看此二进制字段时,值如下所示: 0x004BC878B0CB9A4 F86D0F52C9DEB689401000000D4D68D98C8975425264979CFB92D146582C38D74597B495F87FEA09B68A8440A 当我使用CFDUMP查看同一字段(和同一记录)时,该值如下所示: 075-56120-80-53-10279-122-48-1144

我有一个SQL Server数据库,该数据库有一个包含varbinary(256)类型字段的表

当我通过MMS中的查询查看此二进制字段时,值如下所示:

0x004BC878B0CB9A4 F86D0F52C9DEB689401000000D4D68D98C8975425264979CFB92D146582C38D74597B495F87FEA09B68A8440A

当我使用CFDUMP查看同一字段(和同一记录)时,该值如下所示:

075-56120-80-53-10279-122-48-1144-99-21104-1081000-44-42-115-104-56-1058437387321-49-714520101-126-61-115116891237395-121-2-96-101104-886810

(对于下面的示例,原始二进制值将是
@A
,而上面的CFDUMP值将是
@B

我尝试过使用
CAST(@B作为varbinary(256))
,但没有得到与
@A
相同的值

我必须做什么才能将从CFDUMP检索到的值转换为正确的二进制表示形式

注意:我在数据库中不再有适用的记录。我需要将
@B
转换为可以重新插入varbinary(256)字段的正确值。

(从注释展开)

我并不是讽刺地说,但它们如何显示二进制文件又有什么区别呢?这只是数据呈现方式的不同。这并不意味着实际的二进制值不同

这类似于处理日期的方式。在内部,他们是一个大数字。但是,由于大多数人不知道1234567890所代表的日期,应用程序选择以更人性化的格式显示数字。因此,SSMS可能将日期表示为
2009-02-13 23:31:30.000
,而CF可能将其表示为
{ts'2009-02-13 23:31:30'}
。尽管陈述不同,但它在内部仍然具有相同的价值

就二进制而言,SSMS将其显示为十六进制。如果在查询列上使用,并将二进制转换为十六进制,则可以看到它是相同的值。没有前导的
0x

  writeDump( binaryEncode(yourQuery.binaryColumn, "hex") )
如果您对二进制文件有其他问题,请详细说明

更新:

不幸的是,我认为您不能轻松地将cfdump表示转换回二进制。与Railo的实现不同,Adobe的
cfdump
只是将单个字节的数字表示连接成一个大字符串,没有分隔符。(破折号只是负数)。您可以通过循环遍历示例字符串的字节来重现此结果。下面的代码生成与您发布的数字相同的字符串

   bytes = binaryDecode("004BC878B0CB9A4F...", "hex");
   for (i=1; i<=arrayLen(bytes); i++) {
       WriteOutput( bytes[i] );
   }
bytes=binaryDecode(“004BC878B0CB9A4F…”,“十六进制”);

对于(i=1;iI意外删除了我仍然通过CFDUMP可用的两条记录,我正在尝试恢复二进制字段,这些字段的显示方式与SSMS中的显示方式不同。我将尝试您的建议并让您知道。因此…我的问题是数据不再在数据库中,因此我需要转换CFDUMP表示形式的t将他的数据转换为我可以作为varbinary(256)重新插入的内容进入数据库。当我使用BinaryEncode或BinaryDecode时出错。我两者都有。我查看了html源代码,它看起来没有任何不同。呃..进一步查看,您可能运气不好。我认为最好是从数据库备份还原数据。请参阅我更新的响应。