Mysql的日期存儲字段類型的選擇

在實際開發項目中發現數據庫中得日期項目,有的用datetime,有的用timestamp,有的甚至用int,這之間都有什麼區別呢?什麼場合適用什麼樣的設置呢?

首先看一下各自的特點:

  • int

    1. 4個字節存儲,INT的長度是4個字節,存儲空間上比datatime少,int索引存儲空間也相對較小,排序和查詢效率相對較高一點點
    2. 可讀性極差,無法直觀的看到數據,可能讓你很惱火
  • datetime

    1. 8個字節儲存
    2. 與時區無關
    3. 以’YYYY-MM-DD HH:MM:SS’格式檢索和顯示DATETIME值。支持的範圍爲’1000-01-01 00:00:00’到’9999-12-31 23:59:59’
    4. timestamp支持default current_timestamp 來設置默認自動當前時間
    5. timestamp支持on update current_timestamp 來設置更新時自動當前時間
  • TIMESTAMP

    1. 4個字節儲存
    2. 值以UTC格式保存
    3. 時區轉化 ,存儲時對當前的時區進行轉換,檢索時再轉換回當前的時區。
    4. TIMESTAMP值不能早於1970或晚於2037

在具體使用時,我們將從可讀性、存儲空間、操作性上來分析:

  1. 可讀性
    int的可讀性是極差的。在顯示時需要sql或應用程序進行相應的格式轉換,這無疑帶來了額外的工作量
    datetime和timestamp都是比較直觀的
  2. 存儲空間
    int和timestamp都是佔用4個字節,datetime佔用8個字節,在數據量大的情況下,爲了節約空間,可以考慮前2中
  3. 操作性
    在平時,我們對日期的操作一般有讀、寫、比較、計算幾類。
    讀寫大家都是一樣,沒有太大的區別;
    在比較、計算上int則是要方便很多,其可以直接利用 大於、小於比較,計算時則是通過int加減就可以了
    而剩餘兩種則需要利用工具來進行計算,如java中,則要用到對象和工具類,性能應該要低於直接對int的加減操作

綜合考慮,通常情況個人比較偏愛timestamp,可讀性、空間有了保障,如果對性能不是有嚴苛的要求,在工具類的幫組下,操作也很簡單。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章