這篇文章將為大家詳細講解有關(guān)如何解析MySQL中的時間進位問題,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
公司主營業(yè)務(wù):網(wǎng)站設(shè)計制作、成都網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴(yán)謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出五原免費做網(wǎng)站回饋大家。
mysql更新到5.6.4 之后 , 新增了一個叫factional seconds的特性 , 可以記錄時間的毫秒值。但是目前的數(shù)據(jù)庫是不記錄毫秒值的 , 所以會產(chǎn)生一個java中時間的Milliseconds超過500就會四舍五入的問題。
下面是一個例子,演示了時間是如何進位的。首先創(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 位可看作精度為微秒。
(在線學(xué)習(xí)視頻教程推薦: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 查詢就能看到下面的結(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 的毫秒值都被進位了。
由此可見,要避免這樣的誤差,有兩個手段:
1、定義字段的時候使用 datetime(6) 或 timestamp(6);
2、定義字段時不帶精度,但在將時間存入數(shù)據(jù)庫之前,要將毫秒值截取掉。
關(guān)于如何解析mysql中的時間進位問題就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。