MySQL使用相同的字符串为CRC32()返回不同的值

cmw*_*ght 2 mysql sql crc32 sql-insert

我有一个奇怪的问题,两个查询返回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位的整数,我不能在我的生活中弄清楚为什么它们在这种情况下是不同的.

谢谢!

Joh*_*Woo 7

将列的数据类型更改为INT UNSIGNED.原因是你正在使用SIGNED INT这就是最大值的原因2147483647.

CREATE TABLE tableNAME
(
    full_url_hash INT UNSIGNED
    -- other columns
)
Run Code Online (Sandbox Code Playgroud)