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 の自動初期化および更新機能

参考:MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.7 日付および時間関数

ReratedPosts

MySQLでファイルを読み込ませて実行する方法
SQLにおけるINSERT、DELETE、UPDATEの使い方を解説する
MacでMySQLのパスワードを忘れた時の対処法