【问题标题】:Storing timezone in a database在数据库中存储时区
【发布时间】:2016-02-01 14:16:23
【问题描述】:

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

我是存储整个America/Los_Angeles 字符串,还是有某种整数ID,例如https://stackoverflow.com/a/11580459/1032531 为c# 描述的?如果是 who 字符串,最大字符数是多少?

【问题讨论】:

    标签: mysql sql datetime timezone


    【解决方案1】:

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

    在类 UNIX 系统上,条目存储在文件系统目录层次结构中,而不是按某个代码编号。这是我建议的成功实施。你可以看看它是如何工作的。

    你问:

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

    是的。

    它有某种整数 ID 吗?

    不,如果您希望您的应用程序和数据库面向未来,则不是。在 MySQL 中保存 zoneinfo 数据的部分有一个 time_zone_id,但没有人承诺保持这些数字不变。

    当前(2021a,截至 2021 年 9 月仍然有效)数据库中最长的字符串是 posix/America/Argentina/ComodRivadavia。它有 38 个字符长。 mysql.time_zone_name 表有一个用 64 个字符定义的 Name 列。使用VARCHAR(64) 来存储这些信息是有意义的;这与名称在系统中的存储方式相匹配。顺便说一句,名称都是 7 位 ASCII 格式,因此您可以使用 ascii_general_ci 排序规则来定义存储它们的列。这应该是用户偏好时区列的一个很好的定义。

    time_zone VARCHAR(64) 
              NOT NULL 
              DEFAULT 'UTC' 
              COLLATE ascii_general_ci
    

    WordPress 为用户提供可用时区名称的选择列表(下拉列表),并将用户的选择存储为文本。这是一个很好的模仿例子。

    http://www.iana.org/time-zones

    【讨论】:

    • 一个小的拼写错误... MySQL 8.0.23 在指定列特征时需要 'COLLATE' 而不是 'COLLATION'。
    • 感谢指正。固定。
    【解决方案2】:

    在这里查看MySql DateTime

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

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

    【讨论】:

    • 请描述您引用的“表格中的新列以保留您的时区”。
    • 如果您需要在数据库转换日期时间之前确切知道时区是什么,您需要保留它,因为数据库会自动将您的日期时间转换为服务器时区并存储它。
    • 我的意思是我应该使用VARCHAR(32) 来存储它吗?这对所有时区都足够大吗?另外,请确认时区没有整数 ID。
    • 是的,你应该将它存储为字符串,在这里查看stackoverflow.com/questions/8663590/…
    • 关于长度是的,是32,这里有一个确认stackoverflow.com/questions/3477347/php-tz-setting-length
    猜你喜欢
    • 1970-01-01
    • 2019-12-29
    • 2013-06-08
    • 2013-03-27
    • 2022-01-06
    • 2016-01-23
    • 1970-01-01
    • 2016-12-23
    • 2020-03-21
    相关资源
    最近更新 更多