2013-02-06 11 views
44

Capisco che gli hash saranno diversi in base a diversi tipi di dati in SQL Server. Uno supporta Unicode un altro non .... così via (anche collation)Che tipo di datatype si dovrebbe usare per memorizzare gli hash

Sto usando char (32) come un tipo di dati, ma l'output è strano. Usando questo

select HASHBYTES('MD5','MD5Text') 

dà questo output:

0xA891DB2DA259280A66FD5F35201CAB6A 

e quando

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

uscita:

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

Così Sono nuovo a Server SQL.
Qualcuno potrebbe, per favore, dirmi quale tipo di dati dovrei usare per memorizzare hash ??

+0

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

+0

Grazie amico! declare @h binary (16) Funzionante! –

risposta

107

È necessario utilizzare il tipo di dati binary. È possibile utilizzare binary anziché varbinary poiché la funzione di hash restituirà sempre lo stesso numero di byte per lo stesso tipo di hash (ad esempio MD5, SHA1, ecc.). Ciò ridurrà il (leggero) sovraccarico necessario per gestire una colonna binario di lunghezza variabile (varbinary).

In termini di quale dimensione per farlo, è possibile eseguire questa query per verificare la lunghezza di ogni tipo di hash:

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]; 

e dovrebbe uscire con questo:

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

Risposta eccellente – jhilden

+0

Grazie. :) Spero che sia stato d'aiuto! –

Problemi correlati