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

