5
SELECT BINARY_CHECKSUM('Clifton House, Thornaby Place, Teesdale South, Stockton-On-Tees, Cleveland, TS17 6SD')
SELECT BINARY_CHECKSUM('Clifton House, Teesdale South, Thornaby Place, Stockton-On-Tees, Cleveland, TS17 6SD')

SELECT BINARY_CHECKSUM('Glenfield Hospital, Groby Road, , Leicester, Leicestershire, LE3 9DZ')
SELECT BINARY_CHECKSUM('Glenfield Hospital, Groby Road, , Leicester, Leicestershire, LE3 9EJ')

上記をご覧ください。テキストに違いがあっても、2 組のアドレスは同じチェックサム値を生成します。ランダムなコンテンツに対して CHECKSUM と BINARY_CHECKSUM が異なることを保証することはできませんが、特定の行の比較的小さな変更を判断するのに適していることを理解しています。

興味深いことに、これらの値のペアは正反対のことを示しています。それらは、非常に類似したデータ値に対して等しいチェックサム値を生成しています。これらは、実際には、大規模な (680,000 レコード) アドレス テーブルで唯一の重複するチェックサム値です。

UPDATE を生成する際のチェックサムの値を誤解しているのではないかと少し心配しています。データ行の変更を確実に検出するために、フィールド比較によるブルート フォース フィールドに頼る必要がありますか?

これらの例の元のデータは、6 つの別々の列にありました。わかりやすくするために、コード サンプルを最小限の状態に縮小しました。

4

3 に答える 3

3

チェックサムは決して完全に確実ではありません。完全に常に正しい、どんな問題でも、力ずくで解決する方法です。ただし、機能する可能性のある、それほど強度の低い方法がいくつかあります。

チェックサムは、かなり単純なハッシュです。代わりに hashbytes を使用してみてください。次に、md5 のようなより混沌としたアルゴリズムを利用できます。

例えば:

SELECT HASHBYTES('MD5', 'Glenfield Hospital, Groby Road, , Leicester, Leicestershire, LE3 9DZ')
于 2012-10-11T14:06:16.557 に答える
1

BINARY_CHECKSUM の代わりに MD5 または SHA1 で HASHBYTES() を使用してみてください。最初に HASHBYTES() のヘルプを読んでください...

于 2012-10-11T14:08:32.847 に答える
0

ハッシュバイトを使用できる場合があります。

SELECT HASHBYTES('MD5', 'Glenfield Hospital, Groby Road, , Leicester, Leicestershire, LE3 9DZ')

SELECT HASHBYTES('MD5', 'Glenfield Hospital, Groby Road, , Leicester, Leicestershire, LE3 9EJ')
于 2012-10-11T14:09:21.327 に答える