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