3

int(11)列と数億の行を持つこのテーブルがあります。次のようなクエリを実行すると

SELECT SUM(myIntColumn) as foo FROM myTable;

戻り値は意味がありません。単一の最大の最大値よりも小さいです。この列の私の値は 500m あたりで最大になり、signed int は 2bil まで処理できるはずなので、mysql で整数オーバーフローが発生していると想定し、それについて黙っています。

何をすべきか?

重要かもしれないがおそらく重要ではないその他の詳細:

  • mysql Ver 14.12 Distrib 5.0.75, for debian-linux-gnu (x86_64) using readline 5.2
  • mysqld Ver 5.0.75-0ubuntu10 for debian-linux-gnu on x86_64 ((Ubuntu))
  • Linux kona 2.6.28-11-server #42-Ubuntu SMP Fri Apr 17 02:45:36 UTC 2009 x86_64 GNU/Linux
4

1 に答える 1

5

値を符号なしの値にキャストすることで、範囲を 2 倍にすることができます。

SELECT SUM(CAST(myIntColumn AS UNSIGNED)) ...

より大きなデータ型があります: BIGINT ですが、残念ながらそれはできませんCAST()。それを利用したい場合は、列をそのタイプに変更する必要があります。

ALTER TABLE myTable CHANGE COLUMN myIntColumn myBigIntColumn BIGINT UNSIGNED ...
于 2009-06-29T10:03:37.017 に答える