-1

我的桌子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)

这个说法也行不通

4

1 回答 1

1

将二进制值存储在varbinary列中会更简单。

也就是说,在 SQL 2008 及更高版本中,CONVERT函数为二进制到字符类型的转换添加了一个样式参数(请参阅 MSDN 页面的“二进制样式”部分)。

这应该有效(只要您使用的是 SQL 2008 或更高版本):

update testdb.dbo.testuidpwd 
set pwdhash=CONVERT(NVARCHAR(100),HashBytes('SHA1', password),1)

您可以将样式设置为,2而不是1您想要存储没有前导的值0x

于 2012-10-31T13:08:57.930 回答