首頁  >  文章  >  資料庫  >  關於mysql中的時間進位問題的講解

關於mysql中的時間進位問題的講解

王林
王林轉載
2020-01-21 20:15:082733瀏覽

關於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中的時間進位問題的講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:jb51.net。如有侵權,請聯絡admin@php.cn刪除