gpt4 book ai didi

MySQL-sql服务器: consistency check

转载 作者:行者123 更新时间:2023-11-29 05:34:10 26 4
gpt4 key购买 nike

我正在尝试检查两个数据库之间的数据加载结果。不幸的是,我只能直接访问一个数据库 (MySQL),管理 MSSQL 的公司可以通过 API 将其公开给我们。

我想做的是检查行集中某些列的一致性。最初,我希望能够对列运行 CRC 或散列检查,但似乎没有兼容的方法来执行此操作。

例如,我们可以对 MySQL 中的列运行 CRC32,但没有一种可靠的方法可以在 MSSQL 上执行相同的操作。或者,MSSQL 上有 CHECKSUM_AGG,但 MySQL 上没有其他选择。

最终结果是,如果校验和不同,我想进行二进制搜索以识别需要更改的行。

目前没有批量加载接口(interface),SSIS不可用(MSSQL服务器不是我公司的)。

最佳答案

我想我会回到这里并描述我们最终实现的解决方案。这是颈部的主要疼痛!

首先,由于我们服务器上的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 ) + ...

然后,我们根据 Chinese Remainder Theorem 对整个范围内的 MD5 求和,对三个大素数 (311,313,317) 取模。

这为我们检查的范围提供了三个数字。我们可以合理地确定,如果所有三个数字都匹配每台服务器上的给定范围,则数据是一致的。

我将不向您详细介绍我们为将 Latin-1 中的 Unicode 音译为 UTF-16LE 而必须做的修改

关于MySQL-sql服务器: consistency check,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12160509/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com