为什么在SQL Server中,Hashbytes命令会在以下代码中返回不同的响应?
Declare @Pass nvarchar
set @Pass='SampleHash'
Select HASHBYTES('MD5',@Pass)
Select HASHBYTES('MD5','SampleHash')
---------------------------------------
0x6F0AC8C187CEDB835A9BA373603BDA3F
0xC205AF5CE2048FF5C8C9A5B5ABDAF64E
---------------------------------------
答案 0 :(得分:2)
通过将字符串声明为unicode,您将获得相同的HASHBYTES
结果:
Declare @Pass nvarchar(10)
set @Pass='SampleHash'
Select HASHBYTES('MD5',@Pass)
Select HASHBYTES('MD5',N'SampleHash')
0xB8F6457C129AEBCBB0D2E3097336ED1C
或者使用varchar
代替nvarchar
:
Declare @Pass varchar(10)
set @Pass='SampleHash'
Select HASHBYTES('MD5',@Pass)
Select HASHBYTES('MD5','SampleHash')
0xC205AF5CE2048FF5C8C9A5B5ABDAF64E
编辑:请注意,我还明确声明字符串值的长度为nvarchar(10)
或varchar(10)
,以匹配字符串SampleHash
的长度。