2012-03-08 11 views
2

私はURLurl_crcフィールドを持つMySQLのテーブル製品を、持っています。私は挿入時に誤ったCRC32を計算しています。MySQLの挿入が間違っCRC32ハッシュ

製品INTO INSERT(URL、url_crc)が ( 'http://www.zappos.com/product/7859366/color/106'、 CRC32( 'http://www.zappos.com VALUES /製品/ 7859366 /カラー/ 106' ))

結果は次のとおりです。(

SELECT CRC32: http://www.zappos.com/product/7859366/color/106、2147483647

しかし、私はこれを行うとき、 'http://www.zappos.com/product/7859366/color/106')

結果は次のとおりです。2838206275

は、なぜこのようなことが起こるのですか? 2838206275 != 2147483647

トリガーは役に立ちませんでした。結果は同じです。

答えて

2

32ビット符号付き整数の最大値は2^31-1です。

2838206275より大きい。

(2147483647は便宜上2^31-1)。

つまり、大きなデータ型(bigint)を使用します。

+0

CRC32関数から返されるデータ型はINT UNSIGNEDです。これはBIGINTではなく、それを使用する必要があると言います。そうでなければ、32ビットCRCを格納するのに必要な領域の2倍の領域を使用しています。 – SeanN

1

intタイプの最大値によって切り捨てられました。

url_crc列をbigintに変更します。

ALTER TABLE products MODIFY COLUMN url_crc BIGINT;

関連する問題