Comme indiqué dans mon billet précédent, je travaille actuellement sur une migration de base de données de MySQL vers SQL Server. Ce billet est un mémo personnel (donc, un peu rédigé à la va-vite) mais qui sait… il pourrait vous être utile. ^^
SQL Server et MySQL ne retournent pas le même résultat lors d’un hash MD5 :
SQL Server | MySQL |
HASHBYTES('MD5', 'Test') | MD5('Test') |
0x0CBC6611F5540BD0809A388DC95A615B | 0cbc6611f5540bd0809a388dc95a615b |
Comme vous pouvez le constater, les résultats ne sont pas tout à fait identiques. Si vous souhaitez obtenir un hash MD5 en Transact-SQL rigoureusement identique à un hash MySQL, la commande à saisir est :
CONVERT(NVARCHAR(32),HASHBYTES('MD5', cast('Test' as varchar)),2)
Pour les versions antérieures à SQL Server 2008, la fonction CONVERT() est inopérante. Préférez :
SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',cast('Test' as varchar))),3,32)
Et le tour est joué ^^
PS : j’avoue ne pas avoir le temps de détailler la commande. Si vous souhaitez de plus amples explications, n’hésitez pas à me contacter. 🙂