2013-02-06 21 views
44

Tôi hiểu rằng băm sẽ khác nhau dựa trên các kiểu dữ liệu khác nhau trong SQL Server. Một hỗ trợ Unicode khác không .... như vậy (cũng collation)Loại dữ liệu nào nên sử dụng để lưu trữ băm

Tôi đang sử dụng char (32) làm kiểu dữ liệu nhưng đầu ra là lạ. Sử dụng này

select HASHBYTES('MD5','MD5Text') 

cho ouput này:

0xA891DB2DA259280A66FD5F35201CAB6A 

và khi

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

đầu ra:

Ё'Ы-ўY (fэ_5 «j

Vì vậy, Tôi mới đến SQL Server.
Có thể bất cứ ai, xin vui lòng, cho tôi biết những gì datatype tôi nên sử dụng để lưu trữ băm ??

+0

http: //msdn.microsoft.com/en-us/library/ms188362.aspx –

+0

Cảm ơn người đàn ông! khai báo @h binary (16) Làm việc tuyệt vời! –

Trả lời

107

Bạn nên sử dụng loại dữ liệu binary. Bạn có thể sử dụng binary thay vì varbinary vì hàm băm sẽ luôn trả về cùng một số byte cho cùng một loại băm (ví dụ: MD5, SHA1, v.v.). Điều này sẽ cắt giảm chi phí (nhẹ) cần thiết để quản lý cột nhị phân độ dài biến (varbinary).

Về những gì kích thước để làm cho nó, bạn có thể chạy truy vấn này để kiểm tra độ dài của mỗi loại băm:

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

Và nó nên đi ra với điều này:

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

Câu trả lời tuyệt vời – jhilden

+0

Cảm ơn. :) Hy vọng nó đã giúp! –

Các vấn đề liên quan