Подтвердить что ты не робот

Какой тип данных следует использовать для хранения хэшей

Я понимаю, что хэши будут отличаться в зависимости от разных типов данных в SQL Server. Одна поддержка Unicode другая не... так далее (также сортировка)

Я использую char (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.
Может ли кто-нибудь, пожалуйста, сказать мне, какой тип данных следует использовать для хранения хэшей?

4b9b3361

Ответ 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