【问题标题】:MySQL Date/Time Functions and Timezone IssueMySQL 日期/时间函数和时区问题
【发布时间】:2019-01-31 22:09:24
【问题描述】:

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

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

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

【问题讨论】:

标签: mysql datetime timezone


【解决方案1】:

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

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

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

【讨论】:

  • 这部分不正确。 TIMESTAMP 值会自动转换为通过time_zone 设置设置的时区。这可以在全局或每个会话中更改。
猜你喜欢
  • 1970-01-01
  • 2017-09-30
  • 2010-09-28
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多