我有一个简单的问题:
print HASHBYTES('SHA1', 'az09123')
Run Code Online (Sandbox Code Playgroud)
给我吗:
0xA00592FC3E531C5F7608110F73E8AE4B4F2EA4C3enter
Run Code Online (Sandbox Code Playgroud)
我把它放在名为 OwnerEn 的 navchar 字段中
然后我试试这个:
SELECT * FROM AspNetUsers WHERE OwnerEn = HASHBYTES('SHA1', 'az09123');
Run Code Online (Sandbox Code Playgroud)
没有结果,内容为空
但这给了我结果:
SELECT * FROM AspNetUsers WHERE OwnerEn = '0xA00592FC3E531C5F7608110F73E8AE4B4F2EA4C3';
Run Code Online (Sandbox Code Playgroud)
第一个sql语句有什么问题?
正如奥斯卡在评论中提到的那样,您看不到任何结果,因为该nvarchar值0xA00592FC3E531C5F7608110F73E8AE4B4F2EA4C3与二进制值不同0xA00592FC3E531C5F7608110F73E8AE4B4F2EA4C3。
理想情况下,您可以将哈希值存储在适当的列binary或varbinary数据类型列中,但如果您绝对无法在数据库中更改该值,则需要将convert您的nvarchar值更改为binaryor varbinary (或反之亦然),以便实际比较这两个值:
请注意1末尾的,以指定您要在开头convert包含 。0x
nvarchar到varbinary:
convert(varbinary(max),'0xA00592FC3E531C5F7608110F73E8AE4B4F2EA4C3',1)
Run Code Online (Sandbox Code Playgroud)
varbinary到nvarchar:
convert(nvarchar(100),hashbytes('SHA1', 'az09123'),1)
Run Code Online (Sandbox Code Playgroud)
以下脚本演示了这一点:
select hashbytes('SHA1', 'az09123') as BinaryHash
,convert(varbinary(max),'0xA00592FC3E531C5F7608110F73E8AE4B4F2EA4C3',1) as NvarcharHash
,case when hashbytes('SHA1', 'az09123') = '0xA00592FC3E531C5F7608110F73E8AE4B4F2EA4C3'
then 'Match'
else 'No Match'
end as UnconvertedMatchTest
,case when hashbytes('SHA1', 'az09123') = convert(varbinary(max),'0xA00592FC3E531C5F7608110F73E8AE4B4F2EA4C3',1)
then 'Match'
else 'No Match'
end as ConvertedMatchTest
Run Code Online (Sandbox Code Playgroud)
输出:
+--------------------------------------------+--------------------------------------------+----------------------+--------------------+
| BinaryHash | NvarcharHash | UnconvertedMatchTest | ConvertedMatchTest |
+--------------------------------------------+--------------------------------------------+----------------------+--------------------+
| 0xA00592FC3E531C5F7608110F73E8AE4B4F2EA4C3 | 0xA00592FC3E531C5F7608110F73E8AE4B4F2EA4C3 | No Match | Match |
+--------------------------------------------+--------------------------------------------+----------------------+--------------------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8309 次 |
| 最近记录: |