2

同じ文字列で CRC32 の異なるハッシュ値を返す 2 つのクエリで奇妙な問題が発生しています。

私が実行した場合:

SELECT 'http://mywebsite4.com/myvideos', CRC32('http://mywebsite4.com/myvideos');

返されるハッシュ値は 3769016377 です。

次に実行すると

INSERT INTO locations (full_url, full_url_hash) VALUES ('http://mywebsite4.com/myvideos', CRC32('http://mywebsite4.com/myvideos'))

挿入されるハッシュ値は 2147483647 です。

ここで私が見逃していることは明らかですか?CRC32関数は常に等しい文字列を等しい32ビット整数にハッシュする必要があることを私が理解している限り、私は一生、この場合にそれらが異なる理由を理解できません。

ありがとう!

4

1 に答える 1

7

列のデータ型を に変更しますINT UNSIGNED。その理由は、使用しSIGNED INTているため、最大値が のみ2147483647です。

CREATE TABLE tableNAME
(
    full_url_hash INT UNSIGNED
    -- other columns
)
于 2013-03-06T17:04:05.033 に答える