国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

關于MySQL的時間進位問題淺析

2020-01-18 20:38:28
字體:
來源:轉載
供稿:網友

MySQL 當中默認的時間類型(datetime 和 timestamp)的精度是秒,如果設置進去的時間值精度小于秒的話,就會被四舍五入,可能導致數據庫中的值比原始值多了一秒。也就是說,本來屬于今天的記錄可能會被記到明天。

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

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 的毫秒值都被進位了。

由此可見,要避免這樣的誤差,有兩個手段:

  • 定義字段的時候使用 datetime(6) 或 timestamp(6);
  • 定義字段時不帶精度,但在將時間存入數據庫之前,要將毫秒值截取掉。

相關文檔:

MySQL 5.6 Reference: Fractional Seconds in Time Values

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贵阳市| 宿迁市| 永城市| 汨罗市| 临城县| 桦甸市| 大竹县| 静乐县| 女性| 于都县| 德令哈市| 习水县| 安阳市| 津市市| 颍上县| 卫辉市| 元氏县| 民勤县| 贵州省| 金山区| 清水县| 华容县| 桦南县| 临夏市| 乐都县| 海宁市| 武穴市| 班戈县| 尉犁县| 镇雄县| 汉阴县| 米林县| 耒阳市| 六盘水市| 卓资县| 奈曼旗| 石城县| 当阳市| 师宗县| 丰顺县| 临江市|