sql - 如何处理 silent mysql sum() 整数溢出?

标签 sql mysql overflow sum

我得到的这个表有一个 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/

相关文章:

css - 带有 css 背景和圆 Angular 边框的 Firefox 溢出错误

mysql - 离开加入具体条件请帮助

sql - ORA-32795 : cannot insert into a generated always identity column

python - 在 python 中编写 mysql 查询

javascript - knex.js - 迁移最新的 'Already Up To Date'

html - 表格单元格 : white-space: nowrap + overflow:scroll = not working 中的水平滚动 div

html - bootstrap 如何在减小浏览器大小时出现滚动条

sql - 如何使用TeamCity执行SQL脚本?

mysql - 在 1 个查询 : 2 results, 中使用 2 个条件

mysql - MySQL 到 HiveQL 转换时出现错误,包括 DATE_SUB 和 INTERVAL