美文网首页
聊一聊mysql sum返回类型

聊一聊mysql sum返回类型

作者: 超凡陆战队 | 来源:发表于2016-09-05 15:28 被阅读3693次

前几天上线,遇到一个郁闷的问题,在测试环境没任何问题的,但是到正式环境却报java.math.BigDecimal cannot be cast to java.lang.String异常,当时就蒙逼了,难不成正式环境跟测试环境数据库类型还不一样?
经过定位发现罪魁祸首是一句sql里的sum函数,在测试环境返回的是double可以直接toString,但正式环境却变成bigDeciaml,尼玛这么奇葩的问题都被我遇到了,当时心中一万只草泥马奔腾而过。。。

不过,问题终归还是要解决的,只好上网找原因:

The SUM() and AVG() functions return a DECIMAL value for exact-value arguments (integer or DECIMAL), and a DOUBLE value for approximate-value arguments (FLOAT or DOUBLE). (Before MySQL 5.0.3, SUM() and AVG() return DOUBLE for all numeric arguments.)

http://stackoverflow.com/questions/10592481/what-is-the-return-type-of-sum-in-mysql

sum函数在数据库是number类型的,你的代码中可以使用任何装的下数字型都可以接收。如:sum的值小于java中int的最大值,你就可以用int接收;如果大于Int的最大值而小于double的最大值,你就可以用double。一般在程序设计时,如果不确定它的值范围,可以用long型接收。

哈哈,搜第四列,原来一直是我理解错了。sum()函数返回的就是deciaml类型,测试环境数据都是生成的,复杂的不高,double类型就可以接收了,而正式环境数据超过double的精度范围,悲剧就这样发生了。
原因搞懂了,直接将 toString改为String.valueOf(xx)搞定,看来以后还是要养成习惯少用toString呀,坑太多。

相关文章

  • 聊一聊mysql sum返回类型

    前几天上线,遇到一个郁闷的问题,在测试环境没任何问题的,但是到正式环境却报java.math.BigDecimal...

  • 聊一聊mysql的buffer pool

    前言 buffer pool是什么 咱们在使用mysql的时候,比如很简单的select * from table...

  • MySQL的binlog和redolog

    今天我们来聊一聊 MySQL 的 binlog 和 redo log。 redo log redo log(重做日...

  • 聊一聊

    就是这样,喜欢自我欺骗,明知道,真心想你,或者有事的人,会打电话给你。却还是忍不住的用微信,看一个人的消息和动态,...

  • 聊一聊

    记录一下,现在是女儿的生日。2020.7.25星期六 生日快乐我的小天使 微淼商学院说过最经典的话是:有些做商学院...

  • 聊一聊

    早在三天前师兄就告知我们今天上午老师会和我们在实验室聊一聊。校园卡余额不足,时间紧张未吃早餐,早上慌忙收拾赶紧到实...

  • 聊一聊

    大家好,我是野生梅花鹿。 马上就12点了,我决定用几分钟的时间随便写点啥~ 首先呢,是反省。 这个月,其实懒惰了很...

  • 聊一聊

    很久没写了,聊聊最近发生的事,十月份开始了一段长板之旅,一开始担心害怕摔,因为通过挑战一个个动作,挺有趣的,当你为...

  • 聊一聊

    疫情这些年,常常听到的是,哪哪被封控了之类,作为天选打工人,一直在正常上班搬砖中。 直至上周五晚接...

  • 简单聊一聊,JavaScript中的引用类型

    上图,就只是简单展示引用类型的效果,对象a,对象b,引用是相同的。这里不具体阐述了,具体原理,网上应该一搜一堆,?...

网友评论

      本文标题:聊一聊mysql sum返回类型

      本文链接:https://www.haomeiwen.com/subject/gtprettx.html