SQL Server 2008 将 varchar 转换为 varbinary

Tho*_*off 6 sql-server type-conversion varbinary

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

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

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

0x307846464438464645303030
Run Code Online (Sandbox Code Playgroud)

这不是我所期望的。有谁知道我做错了什么?

Sol*_*zky 6

这里的问题很简单,一个字符串 -- '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
Run Code Online (Sandbox Code Playgroud)

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

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

SELECT CONVERT(VARBINARY(MAX), '0xFFD8FFE000', 1);
-- 0xFFD8FFE000
Run Code Online (Sandbox Code Playgroud)


How*_*sca 3

你所看到的是正确的。您应该能够运行以下命令来查看它们的转换是否正确发生(基本上,将数据库中的 varbinary 值转换回 VARCHAR):

SELECT CONVERT(varbinary(max),'0xFFD8FFE000')
SELECT CONVERT(varchar(100), 0x307846464438464645303030)
Run Code Online (Sandbox Code Playgroud)

或者

SELECT CONVERT(varchar(100), CONVERT(varbinary(max),'0xFFD8FFE000'))
Run Code Online (Sandbox Code Playgroud)

请注意 varbinary 值周围缺少单引号 - SQL Server 中不需要