Хешбайт эквивалент в MySQL

Я перемещаю свои данные с SQL Server на MySQL. Данные перемещаются без каких-либо проблем, но я пытаюсь найти способ проверить целостность данных между SQL Server и MySQL. У меня проблемы с типами данных VARCHAR и NVARCHAR. Поскольку они варьируются от 255 до макс. Я пытаюсь сравнить хеш-коды между этими типами данных, но они не совпадают.

Для тестирования я попробовал это:

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)

Попытка того же в SQL Server дает что-то другое:

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

Как видите, ни один из выводов в SQL Server не совпадает с MySQL. Следовательно, ищите некоторое руководство здесь относительно того, как я могу сделать это сравнение данных.

1 ответ

Одна страница как единица хранения данных для файла базы данных сервера sql только 8KB и предел для varcharLEN является 8000поэтому, следуя вашему примеру теста, вы не сможете получить шестнадцатеричный результат 50000 символов на странице. Вместо этого это результат вашего @Test пример, который рассчитан на длину строки 8000 символов.

Другие вопросы по тегам