主頁 > 知識庫 > 關(guān)于MySQL的時間進(jìn)位問題淺析

關(guān)于MySQL的時間進(jìn)位問題淺析

熱門標(biāo)簽:常州網(wǎng)絡(luò)外呼系統(tǒng)開發(fā) 安徽ai電話電銷機(jī)器人有效果嗎 巫師三血與酒地圖標(biāo)注 萊西市地圖標(biāo)注 在哪里申請400電話 銷售語音電話機(jī)器人 400電話申請信用卡 走過哪個省地圖標(biāo)注 外呼系統(tǒng)電銷受騙

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

下面是一個例子,演示了時間是如何進(jìn)位的。首先創(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,表示保留幾位小數(shù),默認(rèn)值為 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 查詢就能看到下面的結(jié)果:

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 在數(shù)據(jù)庫中的秒值都被進(jìn)位了,time_millis 和 stamp_millis 的毫秒值都被進(jìn)位了。

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

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

相關(guān)文檔:

MySQL 5.6 Reference: Fractional Seconds in Time Values

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • MySQL日期數(shù)據(jù)類型、時間類型使用總結(jié)
  • mysql之TIMESTAMP(時間戳)用法詳解
  • MySql查詢時間段的方法
  • mysql 日期和時間格式轉(zhuǎn)換實現(xiàn)語句
  • mysql計算時間差函數(shù)
  • FROM_UNIXTIME 格式化MYSQL時間戳函數(shù)
  • Mysql 日期時間 DATE_FORMAT(date,format)
  • MySQL中日期和時間戳互相轉(zhuǎn)換的函數(shù)和方法
  • mysql中獲取一天、一周、一月時間數(shù)據(jù)的各種sql語句寫法
  • MySQL timestamp自動更新時間分享

標(biāo)簽:陽江 赤峰 黃石 來賓 煙臺 果洛 鞍山 河北

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《關(guān)于MySQL的時間進(jìn)位問題淺析》,本文關(guān)鍵詞  關(guān)于,MySQL,的,時間,進(jìn)位,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《關(guān)于MySQL的時間進(jìn)位問題淺析》相關(guān)的同類信息!
  • 本頁收集關(guān)于關(guān)于MySQL的時間進(jìn)位問題淺析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章