Хешбайт эквивалент в 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
и предел для varchar
LEN
является 8000
поэтому, следуя вашему примеру теста, вы не сможете получить шестнадцатеричный результат 50000
символов на странице. Вместо этого это результат вашего @Test
пример, который рассчитан на длину строки 8000 символов.