2012-03-08 85 views
2

我有MySQL表产品,其中有网址url_crc领域。插入时我有不正确的CRC32计算。MySQL的插入不正确CRC32哈希

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

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

但是,当我做到这一点:

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

结果是:

为什么出现这种情况? 2838206275 != 2147483647

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

回答

2

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

2838206275大于此值。

(2147483647方便2^31-1)。

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

+0

CRC32函数返回的数据类型是INT UNSIGNED - 我会说你应该使用它而不是BIGINT,否则你需要使用两倍的空间来存储32位CRC。 – SeanN 2016-07-26 20:47:33

1

它被最大值int类型截断。

将url_crc列更改为bigint类型。

ALTER TABLE products MODIFY COLUMN url_crc BIGINT;