2013-02-06 26 views
44

मैं समझता हूँ कि हैश एसक्यूएल सर्वर में विभिन्न डेटाटाइप्स के आधार पर अलग होगा। एक समर्थन यूनिकोड एक और नहीं .... इतने पर (भी मिलान)क्या डेटाप्रकार की तरह एक दुकान में उपयोग करना चाहिए हैश

मैं एक डेटाप्रकार के रूप में चार (32) का उपयोग कर रहा है, लेकिन उत्पादन अजीब है। इस

select HASHBYTES('MD5','MD5Text') 

का उपयोग करते हुए इस ouput देता है:

0xA891DB2DA259280A66FD5F35201CAB6A 

और जब

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

उत्पादन:

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

तो मैं नया हूँ एस क्यू एल सर्वर।
किसी को भी, कृपया, मुझे बता सकते हैं क्या डेटाप्रकार मैं दुकान हैश का उपयोग करना चाहिए ??

+0

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

+0

धन्यवाद आदमी! @ एच बाइनरी घोषित करें (16) कूल काम करना! –

उत्तर

107

आप 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 
+4

उत्कृष्ट उत्तर – jhilden

+0

धन्यवाद। :) उम्मीद है कि यह मदद की! –