mysql中timestamp,datetime,int類型的區別與優劣 int 1. 占用4個字節 2. 建立索引之後,查詢速度快 3. 條件范圍搜索可以使用使用between 4. 不能使用mysql提供的時間函數 結論:適合需要進行大量時間范圍查詢的數據表 datetime 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 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字段的值都會被自動更新。