TIMESTAMP和DATETIM
相同點
兩者都可用來表示YYYY-MM-DD HH:MM:SS[.fraction]類型的日期。
不同點
datetime的默認值為null,timestamp的默認值不為null,且為系統(tǒng)當前時間(current_timestatmp)。如果不做特殊處理,且update沒有指定該列更新,則默認更新為當前時間。
datetime占用8個字節(jié),timestamp占用4個字節(jié)。timestamp利用率更高。
二者存儲方式不一樣,對于timestamp,它把客戶端插入的時間從當前時區(qū)轉(zhuǎn)化為世界標準時間(UTC)進行存儲,查詢時,逆向返回。但對于datetime,基本上存什么是什么。
二者范圍不一樣。timestamp范圍:‘1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’; datetime范圍:’1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’。
時區(qū)
mysql> show variables like '%time_zone%';?
+------------------+--------+
| Variable_name? ? | Value? |
+------------------+--------+
| system_time_zone | CST? ? |
| time_zone? ? ? ? | SYSTEM |
+------------------+--------+
2 rows in set (0.00 sec)
system_time_zone(系統(tǒng)默認時區(qū)),一般為CST,在不同地區(qū)可以解讀成不同時間:
美國中部時間 Central Standard Time (USA) UTC-06:00
澳大利亞中部時間 Central Standard Time (Australia) UTC+09:30
中國標準時 China Standard Time UTC+08:00
古巴標準時 Cuba Standard Time UTC-04:00
time_zone為全局時區(qū),默認采用系統(tǒng)時區(qū)(CST),由于CST有幾種計算方式,有時會導(dǎo)致時間差,可以修改/etc/my.cnf在mysqlid下加入default-time-zone = '+8:00',重啟MySQL即可永久生效。