在数据库中存储时区

时间:2015-11-01 17:33:18

标签: mysql sql datetime timezone

我将使用MySQL和PHP,并且需要将时区存储在数据库中。花了一点时间阅读它,似乎我需要使用像America/Los_Angeles这样的东西,而不是PSTPacific Standard TimePST8PDT+02.00,等

我是否存储了整个America/Los_Angeles字符串,或者是否存在某种整数ID,例如https://stackoverflow.com/a/11580459/1032531描述的c#?如果是谁的字符串,最大字符数是多少?

2 个答案:

答案 0 :(得分:12)

America/HalifaxAsia/Kolkata等时区字符串是指所谓的 zoneinfo 数据库中的条目。读这个。 https://www.iana.org/time-zones目前由互联网号码分配机构维护。http://www.iana.org/time-zones它发生了很大的变化,因为它的维护人员争先恐后地跟上夏令时规则和其他临时政治内容的变化。

在类UNIX系统上,条目存储在文件系统目录层次结构中,而不是存储在某些代码编号中。

你问:

  

我是否存储整个America/Los_Angeles字符串

  

是否有某种整数ID?

不,如果您希望您的应用程序和数据库能够面向未来,那就不是了。在MySQL的一部分中有一个time_zone_id来保存zoneinfo数据,但没有人做出任何关于保持这些数字不变的承诺。

当前(2015g)数据库中最长的字符串是America/Argentina/ComodRivadavia。它的长度为32个字符。使用VARCHAR(64)来存储这些信息可能是有意义的,所以你永远不会用完。

顺便说一下,WordPress为用户提供可用时区名称的选项列表(下拉列表),并将用户的选择存储为文本。

zip()

答案 1 :(得分:5)

点击此处MySql DateTime

  

MySQL将TIMESTAMP值从当前时区转换为UTC进行存储,然后从UTC转换回当前时区进行检索。 (对于其他类型,例如DATETIME,不会发生这种情况。)默认情况下,每个连接的当前时区是服务器的时间。可以基于每个连接设置时区。只要时区设置保持不变,您就可以获得存储的相同值。

您应该在表格中添加一个新列以保留您的时区,并在提取信息时转换您的时区。