我有一个奇怪的问题,两个查询返回相同字符串的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位整数,但我一辈子都搞不懂为什么在这种情况下它们是不同的。
谢谢!

最佳答案

将列的数据类型更改为INT UNSIGNED。原因是你使用的是SIGNED INT这就是为什么最大值只有2147483647

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

SQLFiddle Demo

关于mysql - MySQL使用相同的字符串为CRC32()返回不同的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15253512/

10-11 17:21