我得到的这个表有一个 int(11)
列和数亿行。当我运行类似
SELECT SUM(myIntColumn) as foo FROM myTable;
返回值没有意义——它小于单个最大的最大值。我为该列设置的值最大约 500m,带符号的 int 应该能够处理 ~2bil,所以我假设 mysql 正在经历整数溢出,并对此保持沉默。
怎么办?
可能只是重要但可能无关紧要的杂项细节:
mysql Ver 14.12 Distrib 5.0.75,适用于使用 readline 5.2 的 debian-linux-gnu (x86_64)
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,但不幸的是你不能CAST()
给它。如果您想使用它,您必须将您的列更改为该类型:
ALTER TABLE myTable CHANGE COLUMN myIntColumn myBigIntColumn BIGINT UNSIGNED ...
关于sql - 如何处理 silent mysql sum() 整数溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1057420/