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
型でも自動更新を実現できます。