加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

解决PostgreSQL错误--- integer out of range

发布时间:2020-12-13 17:05:06 所属栏目:百科 来源:网络整理
导读:问题描述 PostgreSQL中,输入以下sql语句查询时,报错 ERROR: integer out of range 。参见postgresql数值类型,integer数据类型的最大值为2147483647,即2*1024*1024*1024。很明显,我们输入的整数溢出了。 select 10 *1024 *1024 *1024 ; 问题解决 stackov

问题描述

PostgreSQL中,输入以下sql语句查询时,报错ERROR: integer out of range。参见postgresql数值类型,integer数据类型的最大值为2147483647,即2*1024*1024*1024。很明显,我们输入的整数溢出了。

select 10*1024*1024*1024;

问题解决

stackoverflow针对此问题的解决办法是修改列的类型为bigint,可我们的问题是溢出的整数位于查询语句而不是列中!

尝试进行类型转换,

select cast(10*1024*1024*1024  as bigint)

仍然报相同的错误,看来PostgreSQL默认将10*1024*1024*1024当作了integer型,我们还没来得及将其转换为bigint就溢出了。。。

这种情况下,我们可以首先计算出10*1024*1024*1024的值–10737418240,将其转为字符串,之后再转为bigint型即可。

-- 10737418240 = 10*1024*1024*1024
select cast('10737418240' as bigint)

更多

实际上在java中也有类似尴尬的问题,如下赋值较大数值给testLong时,因java默认10* 1024 * 1024 * 1024为整型。故也会出现数据溢出的错误。

Long testLong = 10* 1024 * 1024 * 1024;

将上述语句改为如下即可

Long testLong = 10* 1024 * 1024 * 1024L;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读