關於MySQL時間直接相減的問題

最近發現一個問題,在使用MySQL8.0新的延遲計算方式來計算主從延遲時,如果延遲過大,計算出的結果和原先Seconds_Behind_Master的差異特別大,一開始以爲是寫的SQL存在問題,校驗了幾次發現不對,是兩個時間字段計算的結果異常導致,下面是具體的驗證方式

-- 創建一張包含2個時間字段的表
create table t1(dt1 datetime,dt2 datetime)

-- 插入3條數據,三條數據分別爲時間差小於1分鐘/時間差等於1分鐘/時間差大於1分鐘
insert into t1 select '2022-05-27 00:00:55','2022-05-27 00:00:00';
insert into t1 select '2022-05-27 00:01:00','2022-05-27 00:00:00';
insert into t1 select '2022-05-27 00:01:05','2022-05-27 00:00:00';

-- 表中數據示例
+---------------------+---------------------+
| dt1                 | dt2                 |
+---------------------+---------------------+
| 2022-05-27 00:00:55 | 2022-05-27 00:00:00 |
| 2022-05-27 00:01:00 | 2022-05-27 00:00:00 |
| 2022-05-27 00:01:05 | 2022-05-27 00:00:00 |
+---------------------+---------------------+

-- 對數據做各種處理查看輸出的結果
SELECT DT1 - DT2 "時間直接做減法",
       CONVERT(DT1, UNSIGNED INTEGER) - CONVERT(DT2, UNSIGNED INTEGER) "將時間轉換爲整數做減法",
       UNIX_TIMESTAMP(DT1) - UNIX_TIMESTAMP(DT2) "轉換爲時間戳做減法",
       TIME_TO_SEC(TIMEDIFF(DT1, DT2)) "用時間函數處理"
  FROM T1;

+----------------+------------------------+--------------------+----------------+
| 時間直接做減法    | 將時間轉換爲整數做減法    | 轉換爲時間戳做減法    | 用時間函數處理   |
+----------------+------------------------+--------------------+----------------+
|             55 |                     55 |                 55 |             55 |
|            100 |                    100 |                 60 |             60 |
|            105 |                    105 |                 65 |             65 |
+----------------+------------------------+--------------------+----------------+

可以看到,當小於一分鐘時,時間相減不存在問題
當等於或大於一分鐘時,實際上MySQL把時間類型轉換爲了整數型做計算

  • 00:01:00 變爲了100
  • 00:01:05 變爲了105
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章