我遇到了一个奇怪的问题,两个查询为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位的整数,我不能在我的生活中弄清楚为什么它们在这种情况下是不同的。
谢谢!
答案 0 :(得分:7)
将列的数据类型更改为INT UNSIGNED
。原因是您使用的是SIGNED INT
,这就是最大值仅为2147483647
的原因。
CREATE TABLE tableNAME
(
full_url_hash INT UNSIGNED
-- other columns
)