如何将两个不同数据库(MySQL、SQL SERVER)之间的文本字段与散列进行比较?

How do I compare a TEXT field between two different databases (MySQL, SQL SERVER) with a hash?

我试图在两个单独的应用程序(一个在 MySQL,另一个在 SQL 服务器)中快速比较大数据。

myData 字段是两个数据库中的 TEXT 字段,我想看看这个字段的值在他们之间是否发生了变化(myData可以是几十万或几百万字符长)

在MySQL中:

select sha1(myData) from myTable where mypk=1;

在 SQL 服务器中:

select right(convert([varchar](45), hashbytes('SHA1', cast(myData as nvarchar(max))), 1),40) from myTable where mypk=1;

我的散列输出与两个数据库中相同的 TEXT 字段值不匹配。我怎样才能做到这一点?

这是我迄今为止的假设:

  1. MySQL 将散列文本,但 SQL-SERVER 不会(因此转换为 nvarchar)。
  2. MySQL 将不允许转换为 nvarchar。
  3. 如果散列的输入类型不同,输出将不同(在我的例子中,一个是 TEXT,另一个是 nvarchar)。

此外,如果 SQL 服务器不是 DB2 或 Oracle,会怎样?有没有一些简单的方法来解决这个问题(抱歉,如果这部分问题太模糊了)?

SQL 服务器 text 是一种已弃用的类型,已被 varchar(max) 取代,用于存储编码的长非 unicode 字符串。因此 'varchar(max)' 比每个字符使用两个字节的 `nvarchar(max)' 更可能与 MySql 文本二进制兼容。