2013-03-06 78 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

相關問題