MySQL使用相同的字符串为CRC32()返回不同的值

时间:2013-03-06 17:02:42

标签: mysql sql crc32 sql-insert

我遇到了一个奇怪的问题,两个查询为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位的整数,我不能在我的生活中弄清楚为什么它们在这种情况下是不同的。

谢谢!

1 个答案:

答案 0 :(得分:7)

将列的数据类型更改为INT UNSIGNED。原因是您使用的是SIGNED INT,这就是最大值仅为2147483647的原因。

CREATE TABLE tableNAME
(
    full_url_hash INT UNSIGNED
    -- other columns
)