MySQL中datetime时间字段的四舍五入操作,精度问题

定义一张表,多个datetime字段,精度分别为3个无,一个1,一个2,一个3的精度
在这里插入图片描述
情况一:没定义长度

INSERT INTO `zx_task`.`t` (`t0`, `t01`, `t02`) VALUES ('2020-11-07 23:59:59', '2020-11-07 23:59:59.005', '2020-11-07 23:59:59.499');
INSERT INTO `zx_task`.`t` (`t0`, `t01`) VALUES ('2020-11-07 23:59:59.500', '2020-11-07 23:59:59.999');

在这里插入图片描述

情况二:定义了长度

INSERT INTO `zx_task`.`t` (`t1`, `t2`, `t3`) VALUES ( '2020-11-07 23:59:59.999', '2020-11-07 23:59:59.999', '2020-11-07 23:59:59.999');


在这里插入图片描述
总结:
mysql更新到5.6.4 之后 , 新增了一个叫factional seconds的特性 , 可以记录时间的毫秒值.

毫秒部分永远是3位数展示

插入后查询发现

  • 如果没定义长度,则毫秒数部分大于等500时进行进位加一秒,毫秒就变为0了
  • 如果定义了长度,则显示毫秒数,长度如果比毫秒数短则大于等500时进行进位加一秒,否则就原样显示

今天写代码的收就遇到了这个坑
在java取的值是带毫秒的时间,但是时间字段没有设置长度,直接保存到mysql,导致多了一秒,时间一直对不上,真几把坑

下面是java,在把时间参数传给其它接口时做的操作,让毫秒部分也跟mysql一样

Date taskTime;
if (Integer.parseInt(DateUtil.format(taskTime,"SSS")) >= 500) {
    
    
			taskTime = DateUtil.offsetSecond(taskTime, 1);
		}
		taskTime = DateUtil.parseDateTime(DateUtil.format(taskTime, DatePattern.NORM_DATETIME_PATTERN));

猜你喜欢

转载自blog.csdn.net/Fire_Sky_Ho/article/details/127697985