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 ??
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