【问题标题】:Is there MySQL equivalent to Oracle's TIMESTAMP WITH TIME ZONE?是否有 MySQL 相当于 Oracle 的 TIMESTAMP WITH TIME ZONE?
【发布时间】:2012-01-07 19:32:21
【问题描述】:

有没有 MySQL 等价于 Oracle 的 TIMESTAMP WITH TIME ZONE?

我需要将一个包含该数据类型的一些列的 Oracle 表映射到一个 MySQL 表中,但如果不借助一些 MySQL 函数,我似乎无法找到一种简单的方法。

谢谢和最好的问候。

【问题讨论】:

  • 我认为简短的回答是否定的。有计划在未来版本的 MariaDB(一个 MySQL 分支)中添加此类数据类型,但不知道具体时间表。
  • MariaDB 5.6 计划:kb.askmonty.org/en/plans-for-56

标签: mysql oracle10g timezone


【解决方案1】:

不,您需要将数据分成两列,一列是日期时间,另一列保存时区信息。但是您在后一个字段中输入的内容取决于您在 Oracle 中存储的内容 - TIMESTAMP WITH TIME ZONE 数据类型可以包含 TZ 偏移量和(可选)时区区域。显然后者是日期时间在语义上正确的要求,但 IIRC Oracle 不强制填充此数据。

无需借助一些 MySQL 函数

由于 MySQL 没有数据类型,因此很难编写 MySQL 函数来处理它 - 在支持数据类型的 Oracle 中创建 MySQL 兼容表示要简单得多。您只需要计算出您实际拥有的数据并决定如何在 MySQL 中表示它。按照惯例,这意味着将其与 TZ 一起存储在单独的列中,然后使用 convert_tz 函数在选择时将其转换(始终来自 UTC)

【讨论】:

    【解决方案2】:

    MySQL 总是存储timestamps as utc。日期总是在没有时区信息的情况下存储。

    您可以配置 mysql 以从不同的timezones 返回 now() 中的值。

    要存储当前偏移量,您需要自行将其添加到某个列。

    【讨论】:

      猜你喜欢
      • 2023-01-10
      • 1970-01-01
      • 2012-04-04
      • 2020-09-20
      • 2011-03-14
      • 2016-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多