2012-10-31 32 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
相關問題