最近项目上线新的一款产品,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,其中