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 二進位制時間 mysql 二進位制日誌
如果mysql伺服器啟用了二進位制日誌,你可以使用mysqlbinlog工具來恢復從指定的時間點開始 例如,從你最後一次備份 直到現在或另乙個指定的時間點的資料。mysqlbinlog 用於處理二進位制日誌檔案的實用工具 要想從二進位制日誌恢復資料,你需要知道當前二進位制日誌檔案的路徑和檔名。一般可...
mysql的時間最晚日期 MySQL的時間 日期型
mysql的時間 日期型 mysql中表示時間值的有date 時間型別為datetime date timestamp time和year。每個時間型別有乙個有效值範圍和乙個 零 值,當指定不合法的mysql不能表示的值時使用 零 值。如果在資料表中插入乙個不合法的日期,那麼mysql將給出警告或提...
mysql更新時間 Mysql 更新時間
mysql時間加減函式為date add date sub 定義和用法 date add 函式向日期新增指定的時間間隔。date sub 函式向日期減少指定的時間間隔。語法date add date,interval expr type date sub date,interval expr typ...