MySQL では、DATETIME と TIMESTAMP が時間値を格納するために一般的に使用されるデータ型です。どちらも日付と時刻を保存するという目的を果たしますが、使用法に影響を与える根本的な違いがあります。この記事では、DATETIME と TIMESTAMP の違いと、DATETIME のいくつかの制限を克服して TIMESTAMP の利点を活用する方法について説明します。
DATETIME データ型のいくつかの制限を克服するには、次の戦略に従うことができます。
DATETIME がタイム ゾーンに準拠しない問題を解決するには、データベースおよびアプリケーション レベルですべての一時的な操作を標準化し、UTC を使用することができます。
SET GLOBAL time_zone = '+00:00'; SET time_zone = '+00:00';
INSERT INTO example_table (event_time) VALUES (CONVERT_TZ('2024-06-19 12:30:00', 'Your/Timezone', '+00:00'));
SELECT CONVERT_TZ(event_time, '+00:00', 'Your/Timezone') as local_event_time FROM example_table;
行が変更されたときに DATETIME 値を自動的に更新するには、トリガーを使用できます。
CREATE TRIGGER before_update_example_table BEFORE UPDATE ON example_table FOR EACH ROW BEGIN SET NEW.updated_at = NOW(); END;
挿入時に DATETIME 値を自動的に設定するには、NOW() 関数を使用してデフォルト値を割り当てることができます。
CREATE TABLE example_table ( id INT PRIMARY KEY AUTO_INCREMENT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
より高い精度の時刻が必要な場合は、DATETIME(6) または TIMESTAMP(6) を使用して、マイクロ秒の精度まで時刻を保存できます。
CREATE TABLE example_table ( id INT PRIMARY KEY AUTO_INCREMENT, created_at DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6), updated_at DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) );
アプリケーションが時刻を正しく処理できるようにするには、時刻を保存する前にすべての時刻を UTC に変換し、ユーザーに表示するときに現地時刻に変換し直します。
// Setting the application time zone to UTC date_default_timezone_set('UTC'); // Storing the current time as UTC $current_time_utc = date('Y-m-d H:i:s'); $query = "INSERT INTO example_table (event_time) VALUES ('$current_time_utc')"; // Retrieving the time and converting it to local time $event_time_utc = '2024-06-19 12:30:00'; $event_time_local = new DateTime($event_time_utc, new DateTimeZone('UTC')); $event_time_local->setTimezone(new DateTimeZone('Your/Timezone')); echo $event_time_local->format('Y-m-d H:i:s');
これらの戦略に従うことで、DATETIME を使用しながら TIMESTAMP の利点を活用でき、時間値を効率的かつ効果的に処理することが容易になります。
以上がMySQL: `DATETIME` と `TIMESTAMP` の使用と拡張の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。