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)
这不是我所期望的。有谁知道我做错了什么?
这里的问题很简单,一个字符串 -- '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)
你所看到的是正确的。您应该能够运行以下命令来查看它们的转换是否正确发生(基本上,将数据库中的 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 中不需要