mysql中怎么实现时间进位?

  

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

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

创建表test_time (   time_sec datetime,   time_millis datetime (3),   time_micros datetime (6),   stamp_sec时间戳,   stamp_millis时间戳(3),   stamp_micros时间戳(6)   );

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

然后我们插入一条记录:

插入test_time   (time_millis time_sec time_micros,   stamp_sec、stamp_millis stamp_micros)   值(   & # 39;2019-11-30 12:34:56.987654& # 39;   & # 39;2019-11-30 12:34:56.987654& # 39;   & # 39;2019-11-30 12:34:56.987654& # 39;   & # 39;2019-11-30 12:34:56.987654& # 39;   & # 39;2019-11-30 12:34:56.987654& # 39;   & # 39;2019-11-30 12:34:56.987654& # 39;   );

然后再做一次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)或时间戳(6);

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

以上就是关于mysql中的时间进位问题的讲解的详细内容,更多请关注其它相关文章!

mysql中怎么实现时间进位?