解析MySQL中存儲時間日期類型的選擇問題
一般應用中,我們用timestamp,datetime,int類型來存儲時間格式:
int(對應javaBean中的Integer或int)
1. 占用4個字節(jié)
2. 建立索引之后,查詢速度快
3. 條件范圍搜索可以使用使用between
4. 不能使用mysql提供的時間函數(shù)
結(jié)論:適合需要進行大量時間范圍查詢的數(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è)定默認值,所以在不允許為空值的情況下,必須手動指定datetime字段的值才可以成功插入數(shù)據(jù)。
6. 可以在指定datetime字段的值的時候使用now()變量來自動插入系統(tǒ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)化 ,存儲時對當前的時區(qū)進行轉(zhuǎn)換,檢索時再轉(zhuǎn)換回當前的時區(qū)。
6. 默認值為CURRENT_TIMESTAMP(),其實也就是當前的系統(tǒng)時間。
7. 數(shù)據(jù)庫會自動修改其值,所以在插入記錄時不需要指定timestamp字段的名稱和timestamp字段的值,你只需要在設(shè)計表的時候添加一個timestamp字段即可,插入后該字段的值會自動變?yōu)楫斍跋到y(tǒng)時間。
8. 以后任何時間修改表中的記錄時,對應記錄的timestamp值會自動被更新為當前的系統(tǒng)時間。
結(jié)論:timestamp類型適合用來記錄數(shù)據(jù)的最后修改時間,因為只要你更改了記錄中其他字段的值,timestamp字段的值都會被自動更新。
總結(jié)
以上就是本文關(guān)于解析MySQL中存儲時間日期類型的選擇問題的全部內(nèi)容,感興趣的朋友可以參閱:mysql in語句子查詢效率慢的優(yōu)化技巧示例、MYSQL子查詢和嵌套查詢優(yōu)化實例解析、MySQL優(yōu)化之使用連接(join)代替子查詢等,有什么問題可以隨時留言,小編會及時回復大家。希望對大家有所幫助。
版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信