溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql中怎么實現時間進位?

發(fā)布時間:2020-05-21 22:29:43 來源:億速云 閱讀:265 作者:鴿子 欄目:MySQL數據庫

mysql更新到5.6.4 之后 , 新增了一個叫factional seconds的特性 , 可以記錄時間的毫秒值。但是目前的數據庫是不記錄毫秒值的 , 所以會產生一個java中時間的Milliseconds超過500就會四舍五入的問題。

下面是一個例子,演示了時間是如何進位的。首先創(chuàng)建一張表:

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 位可看作精度為微秒。

然后我們插入一條記錄:

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中的時間進位問題的講解的詳細內容,更多請關注億速云其它相關文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI