mysql中的hashbytes等效值

tyky79it  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(423)

我正在将数据从sql server移动到mysql。数据移动没有任何问题,但我正在尝试找到一种方法来验证sqlserver和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

正如您所看到的,SQLServer中没有一个输出与mysql不匹配。因此,在这里寻找一些关于如何进行数据比较的指导。

h4cxqtbf

h4cxqtbf1#

只有一页作为sql server数据库文件的数据存储单元 8KB 以及
varchar LEN8000 ,所以按照您的测试示例,您将无法获得 50000 每页字符数。相反,这是你的努力的结果 @Test 以8000个字符的字符串长度计算的示例。

相关问题