Ответ 1
Вы должны использовать тип данных 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