关于Integer的范围,可能这个大家都接触过,Java基础面试题中,经常出现的一个问题就是int的范围。但是离了面试题之后,我们是否还能注意到这个范围呢?
最近在做项目的时候发现了一颗潜在的雷。数据库设计的时候,在关于有效期的日期的时间存取的过程当中,时间戳关于日期的长度是10位的,后面三位是时间,数据库里设计的字段类型为int,长度为11,这个乍一看,貌似没什么问题。
正如开头所说的那样,int类型也是有范围的,
最小值:Integer.MIN_VALUE=
-2147483648
(-2的31次方)
最大值:Integer.MAX_VALUE= 2147483647
(2的31次方-1)
最大值转为日期即是:2038-01-19 11-14-07
在日期小于这个时间的时候,数据是没有问题的,一旦超过这个范围,在存入数据库时,就会报错提示超出Integer的范围了。
所以这个时候就需要将字段类型改为varchar去存的话会好一些,或者直接设置格式为datetime。
如果非得存为varchar类型的时间戳,也是可以的,在后台取出来的时候,先转为long类型的,然后进行比较或者转为时间格式,也是没问题的。