【发布时间】:2019-02-01 13:45:50
【问题描述】:
我正在将我的数据从 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 不匹配。因此,在这里寻找一些关于如何进行数据比较的指导。
【问题讨论】:
-
你不能试试 SHA 吗?
-
@gotqn 我确实尝试过,但结果相同。 SQL Server 上的哈希值与 MySQL 不同
-
@gotqn 已测试,但二进制校验和的结果不是哈希,而是数字。
标签: mysql sql-server md5 hashbytes