我在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
答案 0 :(得分:2)
执行从 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
希望这有帮助!