为什么TSQL将函数的结果转换为单向和字符串转换为其他方式?

时间:2015-03-06 17:28:53

标签: sql tsql sql-server-2005 binary md5

我在SQL Server 2005中尝试使用此命令从' 123&#39获取MD5:

select SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',  '123' )), 3, 32) 

我得到了这个结果:

202cb962ac59075b964b07152d234b70

我想转换为二进制格式,

select 
   convert(varbinary(16), SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',  '123')), 3, 32)) 

我得到了这个结果:

0x32003000320063006200390036003200

为什么这段代码:

select convert(varbinary(16), '202cb962ac59075b964b07152d234b70')

导致不同的值?

0x32303263623936326163353930373562

1 个答案:

答案 0 :(得分:2)

"常规字符类型" vs Unicode

执行从 Nvarchar (Unicode)到 Varbinary

的转换
select convert(varbinary(16),SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',  '123' )),3,32))

默认情况下,将文本放在单引号中使用常规字符类型,如Char或Varchar。这会执行从 Varchar ("常规数据类型")到 Varbinary

的转换
select convert(varbinary(16),'202cb962ac59075b964b07152d234b70')

试试这个:

SELECT CONVERT(varbinary(16), N'202cb962ac59075b964b07152d234b70')

" N"在引用之前将值定义为Nvarchar(Unicode)并获得所需的值

0x32003000320063006200390036003200

希望这有帮助!