【MySQL】TIMESTAMPとDATETIMEの違い

データベース

TIMESTAMPとDATETIMEは、どちらも日時を扱うデータ型です。
TIMESTAMPとDATETIMEの違いを紹介します。

TIMESTAMPとDATETIMEの違い

TIMESTAMPとDATETIMEには、以下のような違いがあります。

TIMESTAMP DATETIME
4 bytes 5 bytes(旧バージョンでは8bytes)
'1970-01-01 00:00:01’ UTC to '2038-01-09 03:14:07’ '1000-01-01 00:00:00’ to '9999-12-31 23:59:59’
タイムゾーンを考慮 タイムゾーンを考慮しない

特徴として、TIMESTAMPの方が、必要バイト数が小さいです。
また、TIMESTAMPは2038年までしか、現在のところは使用が想定されていません。
そして、TIMESTAMPはシステムのタイムゾーンを考慮しますが、
DATETIMEは考慮しません。作成された日時をそのまま保持します。
タイムゾーンは、DBの移行が考えられる場合には重要になります。
また、デフォルト値は、インデックスの扱いも多少異なります。

TIMESTAMPとDATETIMEの違いの確認方法

create table t_date (
    dt datetime,
    ts timestamp
);

datetimeとtimestampを格納するテーブルを作成します。

-- タイムゾーンの確認
select @@session.time_zone;

一度、タイムゾーンを確認します。

-- 現在時刻を挿入
insert into t_date values(now(), now());

now()関数を使って現在時刻を取得します。

-- レコードの確認
select * from t_date;

レコードの確認をすると、同じ日時が入っています。

-- タイムゾーンの変更
set session time_zone = "+1:00";

タイムゾーンを変更します。
そして、再度レコードを確認するとtimestampの方だけ前回と違う値になっていることが確認できます。