首页 > 解决方案 > MySQL 日期/时间函数和时区问题

问题描述

我正在开发一个在 MySQL 表中使用 created_at 和 updated_at 列的应用程序。服务器/系统时区设置为 EDT。

在插入时,我使用 MySQL CURRENT_TIMESTAMP 函数作为 created_at 值。每当更新记录时,MySQL 都会自动更新 updated_at 值(ON UPDATE CURRENT_TIMESTAMP)。我的问题是 created_at 值输入为 UTC 而 updated_at 值输入为 EDT。

有人可以帮忙解决和解释这个问题吗?

标签: mysqldatetimetimezone

解决方案


我们无法帮助您进行修复,因为您没有显示任何代码。Mysql 日期、时间和日期时间值没有时区的概念。时间戳值使用 UTC。您可以编写代码来处理这些约束。如果您的数据将始终被限制在一个时区,那么只需将任何时间戳值转换为该时区:

 SELECT CONVERT_TZ(created_at, 'GMT', 'EDT'), updated_at
 FROM your_table

当您开始使用多个时区时,这会变得非常混乱 - 更好的解决方案是始终以 UTC 存储时间并更改前端的表示(但如果您在脑损伤的操作系统上运行,这可能会有点痛苦或者不控制服务器配置)


推荐阅读