2013-03-06 127 views
2

我有两个查询返回具有相同字符串的CRC32不同哈希值的奇怪问题。MySQL为相同字符串的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位的整数,但我不能在我的生活中找出为什么它们在这种情况下是不同的。

谢谢!

回答

7

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

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

啊经典。谢谢。 – cmwright 2013-03-06 17:55:22

+0

不客气':D' – 2013-03-07 00:29:34

相关问题