1. 程式人生 > 資料庫 >解析MySQL中儲存時間日期型別的選擇問題

解析MySQL中儲存時間日期型別的選擇問題

一般應用中,我們用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)代替子查詢等,有什麼問題可以隨時留言,小編會及時回覆大家。希望對大家有所幫助。