【MySQL】datetime类型数据储存精确问题

359 阅读1分钟

问题产生

测试人员反馈,数据库表中的时间比传入的时间多了1秒。

比如传的是 2021-04-13 10:00:00,但实际落库数据是 2021-04-13 10:00:01

问题定位

先查看了下数据,确实多了1秒。

本地跑了下单测,也复现了。

百度了下,说是mysql版本 5.6 以上,会将 datetime 类型的数据自动进行四舍五入。

用 select @@version 命令查看了下公司用的mysql版本,是5.7,基本可以确定是这个问题。

问题解决

测试使用的时间工具类是这样的:

public static Date timeOfDate(Integer hour, Integer min, Integer second) {
    Calender c = Calender.getInstance();
    c.setTime(new Date());
    c.set(Calender.HOUR_OF_DAY, hour);
    c.set(Calender.MINUTE, min);
    c.set(Calender.SECOND, second);
    return c.getTime();
}

在结果 return 之前,设置毫秒数为0,让 datatime 类型无法进位,从而解决 datetime 类型存储时间不精确问题。

c.set(Calendar.MILLISECOND, 0);

提交代码,验证通过