我的表testuidpwd
有:
用户:
Uid Password Passwordhash
----------------------------------------
121 wrwrwr 0x0013531FA845AEA1E840BDE787336ED3CAEDFE6E
122 etetxw 0x79BAEFD23C2F4D146F9BD2FDF6C14CA25AC5D6AA
uid
char
数据类型password
nvarchar(100)
数据类型passwordhash
nvarchar(100)
数据类型我的问题是当我使用函数hashbytes('SHA1',password)
update testdb.dbo.testuidpwd
set pwdhash = HashBytes('SHA1', password)
列pwdhash
中的是nvarchar(100)
数据类型。
当我执行以下声明时
update testdb.dbo.testuidpwd
set pwdhash=HashBytes('SHA1', password)
我将pwdhash
列作为硽贕ڷד瘃快寱캏엞这种格式
但我想在varbinary
列中存储pwdhash
格式......
例如:
update testdb.dbo.testuidpwd
set pwdhash = cast(hashbytes('SHA1', PWD) AS varbinary)
此声明也不起作用
答案 0 :(得分:1)
将二进制值存储在varbinary
列中会更简单。
也就是说,在SQL 2008及更高版本中,CONVERT函数将二进制的样式参数添加到char类型的转换中(请参阅MSDN页面的“二进制样式”部分)。
这应该有效(只要您使用的是SQL 2008或更高版本):
update testdb.dbo.testuidpwd
set pwdhash=CONVERT(NVARCHAR(100),HashBytes('SHA1', password),1)
您可以将样式设置为2
,而不是1
,而不想使用前导0x