我想我会回到这个并描述我们最终实施的解决方案。这是脖子上的一大痛!
首先,由于我们服务器上的 MySQL 和远程服务器上的 MSSQL 的固定版本,没有通用的编码方法。MSSQL API 以 UTF-16LE 返回数据,MySQL 数据库将 Unicode 数据存储在 Latin-1 表中
首先,我们连接我们正在比较的字段,然后我们对结果进行 MD5 处理。为了使 MySQL 结果与 MSSQL HASHBYTES 函数的输出相匹配,我们必须这样做:
SELECT ABS(CONV(CONCAT(
IF(MID(MD5(CONC), -8 , 1) >= "8", "FFFFFFFF", ""),
RIGHT(MD5(CONC), 8)
), 16, -10 )) AS CALC
其中 CONC 是连接我们感兴趣的字段的子选择的结果。
在 MSSQL 服务器上,我们必须执行以下查询:
SELECT ABS(CONVERT(INT,HASHBYTES('MD5',
CONVERT(NVARCHAR(4000), FIELD1 ) +
CONVERT(NVARCHAR(4000), FIELD2 ) + ...
然后,根据中国剩余定理,我们对整个范围内的 MD5 求和,以三个大素数 (311,313,317) 为模
这为我们检查的范围提供了三个数字。我们可以合理地确定,如果所有三个数字都匹配每个服务器上的给定范围,那么数据是一致的。
我将为您省去将拉丁语 1 中的 Unicode 音译为 UTF-16LE 所必须进行的处理的详细信息