原文地址:https://www.imooc.com/article/16158html
在使用MySQL數據庫時有不少常見的誤解,其中使用int類型來保存日期數據會提升數據讀取的效率就是比較常見的一個誤解。一般狀況下在選擇表中列的數據類型時咱們要選擇能知足存儲須要的,最小的數據類型,這大概就是你們喜歡使用int類型來保存時間數據的緣由.由於INT類型只佔用4個字節面datetime類型要佔用8個字節,顯然INT要比datetime類型小不少,同時MySQL又提供了兩個很是好用的函數FROM_UNIXTIME() 和UNIX_TIMESTAMP(),使用這兩個函數能夠方便的在INT和DATETIME類型之間進行轉換,可是使用INT類型存儲時間也給咱們帶來了很多的麻煩。
首先,數據的可讀性比較差,咱們在查看數據時不能直觀的看出時間列中記錄的一串整數所表明的時間.
其次,每次進行顯示時都要經過函數進行轉換,增長了數據使用的複雜成度。
那有沒有什麼更好的方法來存儲日期數據呢?這就要用到咱們標題中所說到的timestamp類型了,timestamp類型的特色以下:
. 存儲佔用 4個字節,以年月日小時分秒的日期型式顯示
. 存儲範圍'1970-01-01 00:00:01' to '2038-01-19 03:14:07'.
. 以UTC時區進行存儲,可是以系統當前時間進行顯示
. 能夠在insert和update時把值自動更新爲當前時間
由以上特色能夠知道,timestamp存儲佔用的空間和INT類型相同,實際上timestamp類型的數據在存儲時就是被保存成INT類型的數據來存儲的,這和咱們使用INT來存儲日期時間數據能夠說是徹底同樣的。因爲一樣是使用INT類型來保存數據,因此和INT類型同樣其存儲的時間範圍也是有限制的,這一點你們必定要注意,超過了這個範圍的日期數據建議你們使用datetime類型來保存。另外timestamp數據存儲時是以UTC時區來保存的,在顯示時MySQL會自動的把數據轉換爲當前鏈接所對應時間來顯示。
可見,使用timestamp來存儲日期時間數據不但保證了數據類型的大小同INT類型同樣,同時能夠顯示爲日期時間格式,這在給咱們使用數據帶來了不少的方便。因此強烈建議你們,使用timestamp類型來存儲日期數據而不要再使用INT類型了。若是你對MySQL其它的數據類型的使用特色和如何優化MySQL數據庫的查詢性能有興趣,也能夠關注一下個人<MySQL數據庫架構設計與優化>這門課程,相信其中的內容必定會讓你滿意的。
數據庫