サイレント mysql sum() 整数オーバーフローに対処する方法は?
質問
このテーブルには 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
解決
あなたは符号なしの値に値をキャストすることによって範囲を倍増することができます:
SELECT SUM(CAST(myIntColumn AS UNSIGNED)) ...
BIGINT、残念ながらあなたすることはできません<のhref =「http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html」のrel = "nofollowを:より大きなデータ型がありますnoreferrer ">それにCAST()
する。あなたはそれを利用したい場合は、そのタイプにあなたのコラムを変更する必要があります:
ALTER TABLE myTable CHANGE COLUMN myIntColumn myBigIntColumn BIGINT UNSIGNED ...
所属していません StackOverflow