2009-06-29 17 views
1

私はこのテーブルにint(11)の列と数億の行を持っています。どのようにサイレントmysqlのsum()整数オーバーフローを扱う?

SELECT SUM(myIntColumn) as foo FROM myTable; 

のようなクエリを実行すると、戻り値は意味をなさない - 単一の最大の最大値よりも小さくなります。この列の私の値は約500mくらいで、符号付き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
+0

このリンクは役立ちますか? http://stackoverflow.com/questions/323294/datatype-of-sum-result-in-mysql –

+0

私はそれを見ましたが、その質問は、ポスターが求めていた整数/文字列の振る舞いのために、些細ではないようでした。私のMySqlは、これらの微妙なタイプを理解するのに十分な深さではありません。インタラクティブな実験が不可能な私のデータベースは非常に大きいです...私のいくつかのクエリは何時間もかかりました! –

答えて

2

あなたは符号なしの値に値をキャストすることによって範囲を倍増させることができます:

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

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

ALTER TABLE myTable CHANGE COLUMN myIntColumn myBigIntColumn BIGINT UNSIGNED ... 
+0

テーブルを変更する必要がありました:クエリOK、327995915行に影響(29分0.12秒)... cwazy!ありがとう。 –

+0

同じ問題がありました。キャストを反転すると、私のために働きました:SELECT CAST(SUM(myIntColumn)AS USIGNED)... –

関連する問題