MySQLでDATETIMEとかTIMESTAMPの扱う時のまとめ
MySQLを扱う時に、DATE型とかDATETIME, TIMESTAMPなど似たようなデータ型が多いので、これらの違いや扱い方をまとめておきます。
DATE DATETIME TIMESTAMPの違いとは?
根本的に違うのはDATEで、「2020-02-11」のように日にちまでしか扱えないデータ型となっている。
一方、DATETIMEとTIMESTAMPは「2019-03-21 14:03:32」のように秒まで扱えるデータ型となる。
では、DATETIMEとTIMESTAMPの違いはと言うと、TIMESTAMPはDBにデータを保存する時にタイムゾーンをUTCに直して保存して、データを取り出す時には、UTCから現在のタイムゾーンに移す、と言うことをしている。
参考:MySQL :: MySQL 5.6 リファレンスマニュアル :: 11.3.1 DATE、DATETIME、および TIMESTAMP 型
DATETIME TIMESTAMPを扱う時の注意
個人的にはDATE型よりもTIMESTAMPを使うことが多く、これらのデータ型を使う場合には、DEFAULT CURRENT_TIMESTAMP
を使うと良い。
CREATE TABLE t1 ( ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
上記のように書くことで、新しいデータを追加する時には自動で現在の時刻を取得してくれる。また、ON UPDATE
と書くことで、UPDATE時にも自動で時刻を取得してくれる。
参考:MySQL :: MySQL 5.6 リファレンスマニュアル :: 11.3.5 TIMESTAMP および DATETIME の自動初期化および更新機能