mysql 進製 MySQL 的時間進製問題

2021-10-17 12:57:04 字數 1308 閱讀 5697

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...