TIMESTAMP和DATETIM
相同點(diǎn)
兩者都可用來表示YYYY-MM-DD HH:MM:SS[.fraction]類型的日期。
不同點(diǎn)
datetime的默認(rèn)值為null签杈,timestamp的默認(rèn)值不為null平夜,且為系統(tǒng)當(dāng)前時間(current_timestatmp)沛申。如果不做特殊處理酪耳,且update沒有指定該列更新铡恕,則默認(rèn)更新為當(dāng)前時間翰萨。
datetime占用8個字節(jié)脏答,timestamp占用4個字節(jié)。timestamp利用率更高亩鬼。
二者存儲方式不一樣殖告,對于timestamp,它把客戶端插入的時間從當(dāng)前時區(qū)轉(zhuǎn)化為世界標(biāo)準(zhǔn)時間(UTC)進(jìn)行存儲雳锋,查詢時黄绩,逆向返回。但對于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)默認(rèn)時區(qū)),一般為CST袋马,在不同地區(qū)可以解讀成不同時間:
美國中部時間 Central Standard Time (USA) UTC-06:00
澳大利亞中部時間 Central Standard Time (Australia) UTC+09:30
中國標(biāo)準(zhǔn)時 China Standard Time UTC+08:00
古巴標(biāo)準(zhǔn)時 Cuba Standard Time UTC-04:00
time_zone為全局時區(qū)初澎,默認(rèn)采用系統(tǒng)時區(qū)(CST),由于CST有幾種計(jì)算方式飞蛹,有時會導(dǎo)致時間差谤狡,可以修改/etc/my.cnf在mysqlid下加入default-time-zone = '+8:00'灸眼,重啟MySQL即可永久生效。