【问题标题】:MySQL Time zone confusionMySQL 时区混淆
【发布时间】:2012-10-15 19:06:12
【问题描述】:

几天前我发了一个帖子,并使用了回复中给出的建议。我有一个大型 Web 应用程序,它托管在我们时区的服务器上,在那里我使用了当前时区的所有日期时间/时间戳。我应该使用 UTC 并在代码级别将其转换为适当的时区。

好吧,我现在正在这样做,但我遇到了问题。我现在使用的服务器不在我的时区,并且 TIMESTAMP(插入时)设置为他们的系统(O/S)时间。不是 UTC 时间。

为什么不:

SET time_zone = '+00:00';

修复插入的 TIMESTAMP 值?如何确保 MySQL 服务器默认时间戳为 UTC?

已解决:

这真的很令人困惑,因为 MySQL 会自动将数据库中的 TIMESTAMP 转换并显示为当前时区,因此我所有的 TIMESTAMPS 都被转换并显示为 SYSTEMS 时区。实际上,所有 TIMESTAMPS 都存储为 UTC。所以如果你去:

SET SESSION time_zone = '+00:00'; SELECT * FROM what_ever_table;

它将显示该时区的时间戳。

【问题讨论】:

标签: mysql datetime timezone timestamp


【解决方案1】:

MySQL 在插入/更新值时不关心时区。它看到的只是时间/日期值和字符串。其标准日期格式中不包含时区数据:yyyy-mm-dd hh:mm:ss。时区仅在您检索数据并想要格式化值时进入图片,例如使用convert_tz() 函数

【讨论】:

  • 我不明白。当我插入一条记录时:'timestamp No CURRENT_TIMESTAMP' 它使用系统(O/S)时区来设置日期时间。这与UTC不同。但我希望它是 UTC。
  • 如果我插入当前日期/时间,2012-10-25 09:00:00 对我来说,mysql 应该如何知道这是 gmt-6,而不是来自其他时区的日期?标准 mysql 日期字符串中没有 tz 数据。您可以将 tz 含义附加到存储的日期/时间值。
  • "mysql 怎么知道这是 gmt-6,而不是其他时区的日期?"因为它使用系统的时区。你在说什么。
  • -1 这不适用于时间戳字段。 MySQL 使用其配置的时区设置(默认从系统读取)将日期+时间字符串(存储在时间戳字段中)转换为 UTC。当您读取和写入时间戳字段时,MySQL 会根据此配置的时区在时区之间进行转换。假设没有使用 MySQL 转换函数。请注意,日期时间字段不会转换并按给定的方式存储。
猜你喜欢
  • 1970-01-01
  • 2012-05-15
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多