如何解析mysql中的时间进位问题

这篇文章将为大家详细讲解有关如何解析MySQL中的时间进位问题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

公司主营业务:网站设计制作、成都网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联公司推出五原免费做网站回馈大家。

mysql更新到5.6.4 之后 , 新增了一个叫factional seconds的特性 , 可以记录时间的毫秒值。但是目前的数据库是不记录毫秒值的 , 所以会产生一个java中时间的Milliseconds超过500就会四舍五入的问题。

下面是一个例子,演示了时间是如何进位的。首先创建一张表:

CREATE TABLE test_time (
 time_sec   datetime,
 time_millis datetime(3),
 time_micros datetime(6),
 stamp_sec  timestamp,
 stamp_millis timestamp(3),
 stamp_micros timestamp(6)
);

有的小伙伴可能不知道 datetime 和 timestamp 定义时是可以带精度的,精度值为 0~6,表示保留几位小数,默认值为 0。显然保留 3 位可看作精度为毫秒,保留 6 位可看作精度为微秒。

(在线学习视频教程推荐:mysql视频教程)

然后我们插入一条记录:

INSERT INTO test_time
( time_sec, time_millis, time_micros,
 stamp_sec, stamp_millis, stamp_micros )
VALUES(
 '2019-11-30 12:34:56.987654',
 '2019-11-30 12:34:56.987654',
 '2019-11-30 12:34:56.987654',
 '2019-11-30 12:34:56.987654',
 '2019-11-30 12:34:56.987654',
 '2019-11-30 12:34:56.987654'
);

然后再做一次 select * from test_time 查询就能看到下面的结果:

time_sec             |time_millis            |time_micros               |stamp_sec            |stamp_millis           |stamp_micros              |
---------------------|-----------------------|--------------------------|---------------------|-----------------------|--------------------------|
2019-11-30 12:34:57.0|2019-11-30 12:34:56.988|2019-11-30 12:34:56.987654|2019-11-30 12:34:57.0|2019-11-30 12:34:56.988|2019-11-30 12:34:56.987654|

可以看到 time_sec 和 stamp_sec 在数据库中的秒值都被进位了,time_millis 和 stamp_millis 的毫秒值都被进位了。

由此可见,要避免这样的误差,有两个手段:

1、定义字段的时候使用 datetime(6) 或 timestamp(6);

2、定义字段时不带精度,但在将时间存入数据库之前,要将毫秒值截取掉。

关于如何解析mysql中的时间进位问题就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


标题名称:如何解析mysql中的时间进位问题
分享链接:http://azwzsj.com/article/ihsjjs.html