在MySQL中日期函數datetime與timestamp的區別有幾個朋友會很詳細的知道呢,下面小編來給大家總結一下mysql中datetime與timestamp 一些比較。
相同: 顯示格式一致:YYYY-MM-DD HH:MM:SS;
不同:
范圍: datetime支持的范圍為’1000-01-01 00:00:00′到’9999-12-31 23:59:59′
TIMESTAMP值不能早於1970或晚於2037
儲存:
TIMESTAMP
1.4個字節儲存(Time stamp value is stored in 4 bytes)
2.值以UTC格式保存( it stores the number of milliseconds)
3.時區轉化 ,存儲時對當前的時區進行轉換,檢索時再轉換回當前的時區。
timestamp列類型timestamp值可以從1970的某時的開始一直到2037年,精度為一秒,其值作為數字顯示。
timestamp值顯示尺寸的格式如下表所示:
+-------------------+------------------------+
| 列類型 | 顯示格式 |
| timestamp(14) | yyyymmddhhmmss |
| timestamp(12) | yymmddhhmmss |
| timestamp(10) | yymmddhhmm |
| timestamp(8) | yyyymmdd |
| timestamp(6) | yymmdd |
| timestamp(4) | yymm |
| timestamp(2) | yy |
+-------------------+-------------------------+
“完整”timestamp格式是14位,但timestamp列也可以用更短的顯示尺寸創造
最常見的顯示尺寸是6、8、12、與14。
你可以在創建表時指定一個任意的顯示尺寸,但是定義列長為0或比14大均會被強制定義為列長14。
列長在從1~13范圍的奇數值尺寸均被強制為下一個更大的偶數。
列如:
定義字段長度 強制字段長度
timestamp(0) -> timestamp(14)
timestamp(15)-> timestamp(14)
timestamp(1) -> timestamp(2)
timestamp(5) -> timestamp(6)
所有的timestamp列都有同樣的存儲大小,使用被指定的時期時間值的完整精度(14位)存儲合法的值不考慮顯示尺寸。
不合法的日期,將會被強制為0存儲
datetime
1.8個字節儲存(8 bytes storage)
2.實際格式儲存(Just stores what you have stored and retrieves the same thing which you have stored.)
3.與時區無關(It has nothing to deal with the TIMEZONE and Conversion.)
方法一:
你也可以:
select * from t1 where unix_timestamp(time1) > unix_timestamp('2011-03-03 17:39:05') and unix_timestamp(time1) < unix_
timestamp('2011-03-03 17:39:52');
就是用unix_timestamp函數,將字符型的時間,轉成unix時間戳。個人覺得這樣比較更踏實點兒。
方法二:
time1 between '2011-03-03 17:39:05' and '2011-03-03 17:39:52';
方法三:
可以講datetime類型轉換成date類型再進行比較
例如:convert(date,表名.datetime列名) >= convert(date,表名.datetime列名)
三種方法待求證,總之是不要用字符串這麼直接比
默認值: TIMESTAMP 默認值不為空,可以設置為默認當前時間, NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
datetime 默認值可以設置為空