如何将两个不同数据库(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 字段值不匹配。我怎样才能做到这一点?
这是我迄今为止的假设:
- MySQL 将散列文本,但 SQL-SERVER 不会(因此转换为 nvarchar)。
- MySQL 将不允许转换为 nvarchar。
- 如果散列的输入类型不同,输出将不同(在我的例子中,一个是 TEXT,另一个是 nvarchar)。
此外,如果 SQL 服务器不是 DB2 或 Oracle,会怎样?有没有一些简单的方法来解决这个问题(抱歉,如果这部分问题太模糊了)?
SQL 服务器 text
是一种已弃用的类型,已被 varchar(max)
取代,用于存储编码的长非 unicode 字符串。因此 'varchar(max)' 比每个字符使用两个字节的 `nvarchar(max)' 更可能与 MySql 文本二进制兼容。
我试图在两个单独的应用程序(一个在 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 字段值不匹配。我怎样才能做到这一点?
这是我迄今为止的假设:
- MySQL 将散列文本,但 SQL-SERVER 不会(因此转换为 nvarchar)。
- MySQL 将不允许转换为 nvarchar。
- 如果散列的输入类型不同,输出将不同(在我的例子中,一个是 TEXT,另一个是 nvarchar)。
此外,如果 SQL 服务器不是 DB2 或 Oracle,会怎样?有没有一些简单的方法来解决这个问题(抱歉,如果这部分问题太模糊了)?
SQL 服务器 text
是一种已弃用的类型,已被 varchar(max)
取代,用于存储编码的长非 unicode 字符串。因此 'varchar(max)' 比每个字符使用两个字节的 `nvarchar(max)' 更可能与 MySql 文本二进制兼容。