MySQL插入错误的CRC32哈希

时间:2012-03-08 05:55:17

标签: mysql

我有MySQL表产品,其中包含 url url_crc 字段。插入时我的CRC32计算不正确。

  

INSERT INTO产品(url,url_crc)VALUES   ( 'http://www.zappos.com/product/7859366/color/106',   CRC32( 'http://www.zappos.com/product/7859366/color/106'))

结果是: http://www.zappos.com/product/7859366/color/106,2147483647

但是当我这样做时:

  

SELECT CRC32('http://www.zappos.com/product/7859366/color/106')

结果是: 2838206275

为什么会这样? 2838206275 != 2147483647

触发器没有帮助。结果是一样的。

2 个答案:

答案 0 :(得分:2)

32位有符号整数的最大值是2 ^ 31-1。

2838206275大于此。

(2147483647方便地为2 ^ 31-1)。

换句话说,使用更大的数据类型(bigint)。

答案 1 :(得分:1)

它被int类型的最大值截断。

将url_crc列更改为bigint类型。

ALTER TABLE products MODIFY COLUMN url_crc BIGINT;