2012-10-31 34 views
-1

我的表testuidpwd有:想要在nvarchar数据类型中存储varbinary值吗?

用户:

Uid Password Passwordhash 
----------------------------------------  
121 wrwrwr 0x0013531FA845AEA1E840BDE787336ED3CAEDFE6E 
122 etetxw 0x79BAEFD23C2F4D146F9BD2FDF6C14CA25AC5D6AA 
  • uidchar数据类型
  • passwordnvarchar(100)数据类型
  • passwordhashnvarchar(100)数据类型

我的问题是,当我在列中使用函数hashbytes('SHA1',password)

update testdb.dbo.testuidpwd 
set pwdhash = HashBytes('SHA1', password) 

pwdhashnvarchar(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

将'varbinary'数据存储在'varbinary'数据类型列中。 'nvarchar'不适合二进制数据。 –

+0

是否有可能将varbinary转换为字符串数据类型? –

+0

你可以base64对这个值进行编码。 – Laurence

回答

1

这将是简单的存储在varbinary列中的二进制值。

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

这应该工作(只要你在SQL 2008或更高版本):

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

你可以的,你想存储的值没有前导0x

的样式设置为 2而不是 1
相关问题