如何处理无声mysql sum()整数溢出?

时间:2009-06-29 09:35:03

标签: sql mysql overflow sum

我的这张表有一个int(11)列和数亿行。当我运行像

这样的查询时
SELECT SUM(myIntColumn) as foo FROM myTable;

返回值没有意义 - 它小于单个最大的最大值。我的这个列的值最大值大约在500米左右,而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

1 个答案:

答案 0 :(得分:4)

您可以通过将值转换为无符号值来使范围加倍:

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

有一个更大的数据类型:BIGINT,但不幸的是你不能CAST()。如果要使用它,则必须将列更改为该类型:

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