如何使用MySQL处理不同时区的数据?

时间:2013-12-05 22:42:24

标签: mysql database timezone

我在MySQL中存储来自不同时区的带时间戳的数据,需要满足两个要求:

  • 在时间戳上保持自然顺序(对于索引支持的时间范围提取);
  • 以原始时区显示用户的时间戳。

换句话说,我希望在MySQL数据类型中拥有org.joda.time.DateTime

从短暂的思考中,我看到了几个选项,每个选项都有权衡:

  • 使用MySQL的内置TIMESTAMPDATETIME数据类型。这是最简单的,但MySQL在这里的处理是如此破碎,我甚至没有考虑到这一点。
  • 将时间戳存储为utcMillis BIGINT。这很简单,但不能满足在原始时区显示的要求。
  • 将时间戳存储为timestamp VARCHAR(255)中的ISO 8601字符串。这很简单,但不能满足自然排序要求。
  • 将时间戳存储在一对utcMillis BIGINT, tzOffset BIGINT列中,并在utcMillis上对其进行索引。这并不常用,因为时区偏移在夏令时有效的时区中变化。
  • 将时间戳存储在一对utcMillis BIGINT, timeZoneId VARCHAR(255)列中,并在utcMillis上对其进行索引。这有效,但代价是复杂性和存储大小。

在MySQL中有更好的方法吗?或者 - 那里的任何数据存储都能做到这一点吗?

0 个答案:

没有答案