2013-02-06 114 views
44

我知道基於SQL Server中不同數據類型的散列會有所不同。一個支持Unicode另一個不... ....等等(也整理)應該使用什麼樣的數據類型來存儲散列

我使用字符(32)作爲數據類型,但輸出是奇怪的。 使用這種

select HASHBYTES('MD5','MD5Text') 

給出了這樣的輸出繼電器:

0xA891DB2DA259280A66FD5F35201CAB6A 

declare @h char(32) 
select @h=HASHBYTES('MD5','MD5Text') 
select @h,LEN(@h) 

輸出:

Ё'Ы-ўY(fэ_5«J

所以我是新來的SQL Server。
請問任何人,請告訴我應該使用什麼數據類型來存儲哈希?

+0

HTTP: //msdn.microsoft.com/en-us/library/ms188362.aspx –

+0

謝謝!聲明@h二進制(16)工作酷! –

回答

107

您應該使用binary數據類型。您可以使用binary而不是varbinary,因爲散列函數將始終返回相同類型散列的相同字節數(例如,MD5,SHA1等)。這將減少管理可變長度二進制(varbinary)列所需的(輕微)開銷。

在什麼規模,使之條款,您可以運行此查詢檢查每個哈希類型的長度:

SELECT DATALENGTH(HASHBYTES('MD2', 'Testing')) AS [MD2Length], 
     DATALENGTH(HASHBYTES('MD4', 'Testing')) AS [MD4Length], 
     DATALENGTH(HASHBYTES('MD5', 'Testing')) AS [MD5Length], 
     DATALENGTH(HASHBYTES('SHA', 'Testing')) AS [SHALength], 
     DATALENGTH(HASHBYTES('SHA1', 'Testing')) AS [SHA1Length], 
     /* 2012 only: */ 
     DATALENGTH(HASHBYTES('SHA2_256', 'Testing')) AS [SHA2_256Length], 
     DATALENGTH(HASHBYTES('SHA2_512', 'Testing')) AS [SHA2_512Length]; 

它應該拿出這樣的:

MD2Length MD4Length MD5Length SHALength SHA1Length SHA2_256Length SHA2_512Length 
--------- --------- --------- --------- ---------- -------------- -------------- 
16  16  16  20  20   32    64 
+4

優秀的答案 – jhilden

+0

謝謝。 :)希望它有幫助! –

相關問題