我尝试使用以下代码将图像数据导入到sql server 2008 db中:

INSERT INTO [TAB] (ID_PHOTO,PHOTO)
VALUES(
    CAST('333EFB54-7062-E043-F088-FE0A916C0297' as uniqueidentifier),
    CONVERT(varbinary(max),'0xFFD8FFE000')
)

该字符串只是一个虚拟对象,但是当我进行插入操作时,我在数据库中发现了类似的内容
0x307846464438464645303030

这不完全是我所期望的。有人知道我做错了吗?

最佳答案

这里的问题很简单,就是将一个字符串-'0xFFD8FFE000'-转换为VARBINARY,因此每个字符-首先是0,然后是x,然后是F,等等-被“转换”为其十六进制表示形式:

Character   --  Hex value
  0               30
  x               78
  F               46
  F               46
  D               44
  8               38
  F               46
  F               46
  E               45
  0               30
  0               30
  0               30

因此,0xFFD8FFE000被视为只是一个字符串,就像“这是一个测试”一样,而不是一个字节序列。

幸运的是,修复非常简单:只需将1的“样式”值添加到CONVERT的可选第3个参数中:

SELECT CONVERT(VARBINARY(MAX), '0xFFD8FFE000', 1);
-- 0xFFD8FFE000

10-08 11:57