【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の方だけ前回と違う値になっていることが確認できます。