填坑之解决项目中基本数据类型溢出问题

在开发XX信用X产品时,遇到价格字段溢出问题,由于Integer类型无法存储百万数值。为防止类似情况,建议使用bigint(20位)作为数据库字段类型。当数据库字段为unsigned时,Java对象对应属性应为BigInteger;否则,应为Long。避免使用UNSIGNED,以防意外效果。详细讨论见原文。
摘要由CSDN通过智能技术生成

最近项目上线新的一款产品,XX信用X,价格高的离谱,一个月达百万,也不知道什么土豪等着上线用…
但是开发时遇到问题,百万在后台配局数据末尾补齐分毫厘后变成:40000000,000,而数据库中价格字段为Integer类型,超过了支持的位数(10位),根本入不了库(坑…),既然这样就改吧,为防止后续其他产品也遇到类似的情况,以及已经考虑到分毫厘这些位了,Mysql里直接使用数据类型bigint(20位) 即可满足。

 这里需要注意下,mysql的数据类型有是否使用UNSIGNED符号类型这一属性,
 区别在于:例如BIGINT的类型范围是-9223372036854775808(-2^63 )到 9223372036854775807(2^63-1), 
 而IBIGINT(20) UNSIGNED的取值范围是0 ~18446744073709551615。
 如果这时候java模型中字段类型为Long时,不注意可能在代码运行时报错:java.lang.ClassCastException: java.lang.Long cannot be cast to java.math.BigInteger。
解释下为什么:
 1 如果未使用无符号类型,BIGINT(20)的取值范围为-9223372036854775808(-2^63 )到 9223372036854775807(2^63-1)。与Java.lang.Long的取值范围完全一致,mybatis会将其映射为Long;
 2 而BIGINT(20) UNSIGNED的取值范围是0 ~18446744073709551615,其中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值