2 votes

Équivalent des hashbytes dans MySQL

Je transfère mes données de SQL Server à MySQL. Les données sont transférées sans problème, mais j'essaie de trouver un moyen de valider l'intégrité des données entre SQL Server et MySQL. J'ai des problèmes avec les types de données suivants VARCHAR y NVARCHAR . Puisque ceux-ci vont de 255 à MAX . J'essaie d'effectuer une comparaison de hachage entre ces types de données, mais elles ne correspondent pas.

Pour le tester, j'ai essayé ceci :

mysql> SET @test := repeat('t',50000);
Query OK, 0 rows affected (0.00 sec)

mysql> select md5(@test);
+----------------------------------+
| md5(@test)                       |
+----------------------------------+
| a9cf60d59fe2fb94a84bc106eca028be |
+----------------------------------+
1 row in set (0.01 sec)

En essayant la même chose dans SQL Server, on obtient quelque chose de différent :

DECLARE @Test NVARCHAR(MAX) = REPLICATE(CONVERT(NVARCHAR(MAX), N't'), 50000);

SELECT HashBytes('MD5', CONVERT(varchar, @Test));

0x3C48C287BC783516AC89297848A104FE

select LOWER(CONVERT(VARCHAR(32), HashBytes('MD5', CONVERT(varchar, @Test)), 2));

3c48c287bc783516ac89297848a104fe

SELECT CONVERT(VARCHAR(32),HashBytes('MD5', @Test),2);

40752EB301B41EEAEB309348CE9711D6

Comme vous pouvez le voir, aucune des sorties dans SQL Server ne correspond à MySQL. J'ai donc besoin de conseils pour savoir comment effectuer cette comparaison de données.

0voto

The Unknown Points 146

Une page comme unité de stockage de données pour un fichier de base de données sql server est seulement 8KB et la limite pour varchar LEN est 8000 Ainsi, en suivant votre exemple de test, vous ne pourrez pas obtenir le résultat hexadécimal de 50000 caractères par page. Il s'agit plutôt du résultat de votre @Test exemple qui est calculé sur une longueur de chaîne de 8000 caractères.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X