Mysql時間欄位格式如何選擇,TIMESTAMP,DATETIME,INT?

韓師學子--胖佳發表於2019-02-23

 

    Mysql時間欄位格式如何選擇,TIMESTAMP,DATETIME,INT?

 

       首先 DATETIM和TIMESTAMP型別所佔的儲存空間不同,前者8個位元組,後者4個位元組,這樣造成的後果是兩者能表示的時間範圍不同。前者範圍為1000-01-01 00:00:00 ~ 9999-12-31 23:59:59,後者範圍為1970-01-01 08:00:01到2038-01-19 11:14:07。所以可以看到TIMESTAMP支援的範圍比DATATIME要小,容易出現超出的情況.
 

       其次,TIMESTAMP型別在預設情況下,insert、update 資料時,TIMESTAMP列會自動以當前時間(CURRENT_TIMESTAMP)填充/更新。最主要的區別-受時區影響不同。timestamp會跟隨設定的時區變化而變化,而datetime儲存的是絕對值不會變化。
一個timestamp欄位,一個datetime欄位,修改時區SET TIME_ZONE = "america/new_york";後,timestamp欄位的值變了! 
      因此,如果應用場景有跨時區要求的要特別注意這點。

       第三,TIMESTAMP比較受時區timezone的影響以及MYSQL版本和伺服器的SQL MODE的影響。

       所以一般來說,我比較傾向選擇DATETIME,至於你說到索引的問題,選擇DATETIME作為索引,如果碰到大量資料查詢慢的情況,也可以分割槽表解決。

      INT存時間戳。佔用資源少,查詢速度快。條件範圍搜尋使用between沒什麼問題。查詢條件自由拼接。用int還是比較好的。如果你要在表示時間欄位上建立索引,那麼使用INT索引效率要高。

相關文章