MySQLで日時を扱う際、datetime型とtimestamp型があります。どちらを使うべきかは、用途に応じて選択する必要があります。以下に、それぞれの特徴と使い方を説明します。
datetime型
datetime型は、日時を「YYYY-MM-DD HH:MM:SS」の形式で保存します。以下はdatetime型の特徴です:
- 範囲は1000-01-01 00:00:00から9999-12-31 23:59:59まで。
- タイムゾーンの影響を受けない。
- 主にイベントの日時を記録する場合に使用されます。
例:
CREATE TABLE events (
id INT AUTO_INCREMENT PRIMARY KEY,
event_name VARCHAR(100),
event_time DATETIME
);
INSERT INTO events (event_name, event_time) VALUES ('Meeting', '2024-06-28 10:00:00');
SELECT * FROM events;
timestamp型
timestamp型は、UNIXタイムスタンプとして日時を保存します。以下はtimestamp型の特徴です:
- 範囲は1970-01-01 00:00:01 UTCから2038-01-19 03:14:07 UTCまで。
- タイムゾーンの影響を受ける。
- 主にレコードの作成・更新日時を自動的に記録する場合に使用されます。
例:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO users (username) VALUES ('Alice');
SELECT * FROM users;
datetime型とtimestamp型の選択基準
以下の基準に基づいてdatetime型とtimestamp型を選択します:
- 特定のイベント日時を記録する場合:
datetime型を使用。 - レコードの作成・更新日時を自動で記録する場合:
timestamp型を使用。 - タイムゾーンに依存しない日時を扱いたい場合:
datetime型を使用。 - タイムゾーンに依存する日時を扱いたい場合:
timestamp型を使用。
最新情報
MySQLの最新バージョンでは、両方のデータ型での操作がさらに簡単になっています。例えば、DATETIME型での自動初期化や更新がサポートされています。
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
log_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
INSERT INTO logs VALUES (DEFAULT);
SELECT * FROM logs;
このようにして、datetime型でも自動更新を実現できます。
