2012-08-29 9 views
5

मैं MSSQL के इस टुकड़ा है -MySQL बराबर

CONVERT(INT, HASHBYTES('MD5', {some_field})) 

... और मैं वास्तव में एक MySQL बराबर करना चाहते हैं। मुझे यकीन है कि HASHBYTES('MD5', ...) बिट MySQL के MD5(...) जैसा ही है - यह CONVERT(INT, ...) बिट है जो वास्तव में मुझे परेशान कर रहा है।

धन्यवाद।

उत्तर

6

MD5() समारोह के लिए MySQL मैनुअल प्रविष्टि से:

मूल्य अगर तर्क NULL था 32 हेक्स अंक, या NULL के एक स्ट्रिंग के रूप में दिया जाता है।

MSSQL CONVERT() समारोह जो आप ऊपर उद्धृत 4 सबसे कम क्रम बाइट्स छोटा द्वारा हस्ताक्षरित 32-बिट पूर्णांक के लिए अपनी varbinary तर्क बदल देता है। यह एक उपद्रव का थोड़ा सा है क्योंकि MySQL अंकगणित 64-बिट परिशुद्धता के लिए काम करता है।

इसलिए हम MySQL के हेक्स प्रतिनिधित्व (4 सबसे कम क्रम बाइट्स का प्रतिनिधित्व) के दायीं 8 अंक ले लेना चाहिए और MySQL के CONV() समारोह का उपयोग कर दिया गया दशमलव कनवर्ट करते हैं, तो परिणाम पंजीकरण का विस्तार:

CONV(RIGHT(MD5('foo'),8), 16, 10)^0x80000000 - 0x80000000 
+0

दुःख की बात है कि ऐसा लगता है कि शून्य में परिणाम होता है, जो एमएसएसक्यूएल का उत्पादन नहीं करता है। – Jez

+0

@ जेज़: ऊपर दिए गए मेरे अपडेट किए गए उत्तर को देखें। वास्तविकता यह है कि आपको शायद ऐसा नहीं करना चाहिए, खासकर सुरक्षा अनुप्रयोगों में नहीं, क्योंकि आप रूपांतरण के दौरान 75% हैश खो रहे हैं। – eggyal

+0

हां, ऐसा लगता है कि आप सही हैं। कितना दुर्भाग्यपूर्ण है ... – Jez

संबंधित मुद्दे