Хешбайтный эквивалент в MySQL - PullRequest
0 голосов
/ 27 августа 2018

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

Для целей тестирования я попытался это сделать:

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 Ответ

0 голосов
/ 27 августа 2018

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

...