Sql server Hashbytes函数输出

Sql server Hashbytes函数输出,sql-server,hashbytes,Sql Server,Hashbytes,我在使用MSSQL 2008 R2的Hashbytes函数时遇到了一个奇怪的情况 选择密码,Hashbytes('SHA1','sa')返回 0x3608A6D1A05ABA23EA390E5F3B48203DBB7241F7 稍后,我手动将表字段更新为此值,但是 其中Password=Hashbytes('SHA1','sa') 没有给我任何结果。我已经使用了varbinary、binary、varchar、nvarchar和char数据类型。请说明问题所在,以及我如何解决问题。谢谢。对于SH

我在使用MSSQL 2008 R2的Hashbytes函数时遇到了一个奇怪的情况

选择密码,Hashbytes('SHA1','sa')返回 0x3608A6D1A05ABA23EA390E5F3B48203DBB7241F7

稍后,我手动将表字段更新为此值,但是 其中Password=Hashbytes('SHA1','sa') 没有给我任何结果。我已经使用了varbinary、binary、varchar、nvarchar和char数据类型。请说明问题所在,以及我如何解决问题。谢谢。

对于SHA-1,您的输出大小为“SHA和SHA1的160位(20字节)”

因此:

declare @password varbinary(19); 
set @password = HASHBYTES('SHA1','sa'); 
if @password= HASHBYTES('SHA1','sa') 
    print 'yes'; 
else 
    print 'no'
返回
,因为没有足够的空间正确存储结果;但是这个

declare @password varbinary(20); 
set @password = HASHBYTES('SHA1','sa'); 
if @password= HASHBYTES('SHA1','sa') 
    print 'yes'; 
else 
    print 'no'
返回
yes
。如果您的
Password
字段是
binary
varbinary
并且可以容纳20个字节,则应该可以


顺便说一下,如果只指定
binary
varbinary
,而不指定长度,则会得到1字节,这通常不是您想要的