2

我遇到了一个奇怪的问题,两个查询返回具有相同字符串的 CRC32 的不同哈希值。

如果我运行:

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 回答