關(guān)于MySQL的時間進位問題淺析
MySQL 當中默認的時間類型(datetime 和 timestamp)的精度是秒,如果設(shè)置進去的時間值精度小于秒的話,就會被四舍五入,可能導致數(shù)據(jù)庫中的值比原始值多了一秒。也就是說,本來屬于今天的記錄可能會被記到明天。
下面是一個例子,演示了時間是如何進位的。首先創(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ù),默認值為 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ù)庫中的秒值都被進位了,time_millis 和 stamp_millis 的毫秒值都被進位了。
由此可見,要避免這樣的誤差,有兩個手段:
- 定義字段的時候使用 datetime(6) 或 timestamp(6);
- 定義字段時不帶精度,但在將時間存入數(shù)據(jù)庫之前,要將毫秒值截取掉。
相關(guān)文檔:
MySQL 5.6 Reference: Fractional Seconds in Time Values
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。
相關(guān)文章
MySQL與PHP的基礎(chǔ)與應(yīng)用專題之自連接
MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),屬于 Oracle 旗下產(chǎn)品。MySQL 是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,本系列將帶你掌握php與mysql的基礎(chǔ)應(yīng)用,本篇從自連接開始2022-02-02
MySQL數(shù)據(jù)實時同步到MongoDB的實踐分享
很多 DBA 同學經(jīng)常會遇到要從一個數(shù)據(jù)庫實時同步到另一個數(shù)據(jù)庫的問題,同構(gòu)數(shù)據(jù)還相對容易,遇上異構(gòu)數(shù)據(jù)、表多、數(shù)據(jù)量大等情況就難以同步,我自己親測了一種方式可以實現(xiàn)MySQL數(shù)據(jù)實時同步到MongoDB,跟大家分享一下,希望對你有幫助2024-01-01
Mac OS下PHP環(huán)境搭建及PHP操作MySQL常用方法小結(jié)
MAMP從名字上也可以看出來,是Mac OS的Apache+MySQL+PHP的集成環(huán)境包,本文就來簡單說一下Mac OS下PHP環(huán)境搭建及PHP操作MySQL的常用方法小結(jié).2016-05-05
window環(huán)境下使用VScode連接虛擬機MySQL方法
這篇文章主要介紹了window環(huán)境下使用VScode連接虛擬機MySQL方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-04-04
MySQL存儲引擎中MyISAM和InnoDB區(qū)別詳解
存儲引擎說白了就是如何存儲數(shù)據(jù)、如何為存儲的數(shù)據(jù)建立索引和如何更新、查詢數(shù)據(jù)等技術(shù)的實現(xiàn)方法。因為在關(guān)系數(shù)據(jù)庫中數(shù)據(jù)的存儲是以表的形式存儲的,所以存儲引擎也可以稱為表類型(即存儲和操作此表的類型)2016-12-12

