0

我正在尝试快速比较两个独立应用程序中的大数据(一个在 MySQL 上,另一个在 SQL SERVER 上)。

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 将散列 TEXT,但 SQL-SERVER 不会(因此转换为 nvarchar)。
  2. MySQL 不允许转换为 nvarchar。
  3. 如果散列的输入类型不同,则输出将不同(在我的情况下,一个是 TEXT,另一个是 nvarchar)。

此外,如果使用 DB2 或 Oracle 而不是 SQL Server 会怎样?是否有一些简单的方法来解决这个问题(如果 q 的这一部分太模糊,很抱歉)?

4

1 回答 1

1

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

于 2021-08-12T18:22:23.877 回答