我有一个奇怪的问题,两个查询返回相同字符串的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/