Jakiego typu danych mam używać do przechowywania skrótów?


Rozumiem, że skróty będą się różnić w zależności od różnych typów danych w SQL Server. Jedna obsługuje Unicode, druga nie ... i tak dalej (także sortowanie)
Używam char (32) jako typ danych, ale dane wyjściowe są dziwne.
Korzystanie z tego
select HASHBYTES('MD5','MD5Text')

daje taki wynik:
0xA891DB2DA259280A66FD5F35201CAB6A

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

Wyjście:
Ё 'Ы-ўY (f_5 "j
Więc jestem nowy w SQL Server.

Czy ktoś może mi powiedzieć, jakiego typu danych powinienem używać do przechowywania skrótów?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Musisz użyć typu danych
binary
. Możesz użyć
binary
zamiast
varbinary
, ponieważ funkcja skrótu zawsze zwróci tę samą liczbę bajtów dla tego samego typu skrótu (np.
MD5
, < code> SHA1 itp.). Zmniejszy to (pomniejsze) obciążenie wymagane do zarządzania kolumną binarną o zmiennej długości (
varbinary
).
Jeśli chodzi o rozmiar, który należy wykonać, możesz uruchomić to zapytanie, aby sprawdzić długość każdego typu skrótu:
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];

I powinno to wyjść z tego:
MD2Length MD4Length MD5Length SHALength SHA1Length SHA2_256Length SHA2_512Length
--------- --------- --------- --------- ---------- -------------- --------------
16 16 16 20 20 32 64

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się