一般應用中,我們用timestamp,datetime,int類型來存儲時間格式:
int(對應javaBean中的Integer或int)
1. 占用4個字節
2. 建立索引之后,查詢速度快
3. 條件范圍搜索可以使用使用between
4. 不能使用mysql提供的時間函數
結論:適合需要進行大量時間范圍查詢的數據表
datetime(javaBean中用Date類型)
1. 占用8個字節
2. 允許為空值,可以自定義值,系統不會自動修改其值。
3. 實際格式儲存(Just stores what you have stored and retrieves the same thing which you have stored.)
4. 與時區無關(It has nothing to deal with the TIMEZONE and Conversion.)
5. 不可以設定默認值,所以在不允許為空值的情況下,必須手動指定datetime字段的值才可以成功插入數據。
6. 可以在指定datetime字段的值的時候使用now()變量來自動插入系統的當前時間。
結論:datetime類型適合用來記錄數據的原始的創建時間,因為無論你怎么更改記錄中其他字段的值,datetime字段的值都不會改變,除非你手動更改它。
timestamp(javaBean中用Date或Timestamp類型)
1. 占用4個字節
2. 允許為空值,但是不可以自定義值,所以為空值時沒有任何意義。
3. TIMESTAMP值不能早于1970或晚于2037。這說明一個日期,例如'1968-01-01',雖然對于DATETIME或DATE值是有效的,但對于TIMESTAMP值卻無效,如果分配給這樣一個對象將被轉換為0。
4.值以UTC格式保存( it stores the number of milliseconds)
5.時區轉化 ,存儲時對當前的時區進行轉換,檢索時再轉換回當前的時區。
6. 默認值為CURRENT_TIMESTAMP(),其實也就是當前的系統時間。
7. 數據庫會自動修改其值,所以在插入記錄時不需要指定timestamp字段的名稱和timestamp字段的值,你只需要在設計表的時候添加一個timestamp字段即可,插入后該字段的值會自動變為當前系統時間。
8. 以后任何時間修改表中的記錄時,對應記錄的timestamp值會自動被更新為當前的系統時間。
結論:timestamp類型適合用來記錄數據的最后修改時間,因為只要你更改了記錄中其他字段的值,timestamp字段的值都會被自動更新。
總結
以上就是本文關于解析MySQL中存儲時間日期類型的選擇問題的全部內容,感興趣的朋友可以參閱:mysql in語句子查詢效率慢的優化技巧示例、MYSQL子查詢和嵌套查詢優化實例解析、MySQL優化之使用連接(join)代替子查詢等,有什么問題可以隨時留言,小編會及時回復大家。希望對大家有所幫助。
您可能感興趣的文章:- MySQL存儲時間類型選擇的問題講解
- 如何選擇合適的MySQL日期時間類型來存儲你的時間
- 解決MySQL存儲時間出現不一致的問題
- mysql獲取指定時間段中所有日期或月份的語句(不設存儲過程,不加表)
- MySQL中存儲時間的最佳實踐指南