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