在 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中文網其他相關文章!