想在nvarchar数据类型中存储varbinary值?

时间:2012-10-31 11:23:06

标签: sql nvarchar

我的表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)

此声明也不起作用

1 个答案:

答案 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

来存储值