web-dev-qa-db-fra.com

Quel type de données doit-on utiliser pour stocker les hachages?

Je comprends que les hachages seront différents en fonction des différents types de données dans SQL Server. Un support Unicode un autre pas .... ainsi de suite (également collation)

J'utilise char (32) comme type de données mais la sortie est bizarre. Utiliser ceci

select HASHBYTES('MD5','MD5Text')

donne cette sortie:

0xA891DB2DA259280A66FD5F35201CAB6A

et quand

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

sortie:

Ё’Ы-ўY (fэ_5 "j

Je suis donc nouveau sur SQL Server.
Quelqu'un pourrait-il, s'il vous plaît, me dire quel type de données dois-je utiliser pour stocker les hachages ??

54
Suhrob Samiev

Vous devez utiliser le type de données binary . Vous pouvez utiliser binary au lieu de varbinary car la fonction de hachage retournera toujours le même nombre d'octets pour le même type de hachage (par exemple MD5, SHA1, etc.). Cela réduira la surcharge (légère) requise pour gérer une colonne binaire de longueur variable (varbinary).

En termes de taille, vous pouvez exécuter cette requête pour vérifier la longueur de chaque type de hachage:

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

Et cela devrait sortir avec ceci:

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