在数据库中存储时区的正确方法


Proper way to store a timezone in a database?

让我解释一下:我不是在问在数据库中存储特定日期时间的时区的正确方法。我说的是时区本身。例如:

我有一个名为'users'的MySQL表。现在,在这个表中,我希望有一个列包含用户所在位置的时区(这是用户提供的,将从列表中选择)。我正在使用PHP,它有一个时区字符串列表,像这样:

美国时区列表

现在,显而易见的解决方案(至少对我来说)是在'users'表中创建一个VARCHAR列,然后将PHP使用的时区字符串存储在该列中。

现在我想一下,这将假设我总是使用PHP与数据库表交互,虽然现在是这样,但将来可能不是这样。而且(如果我错了请纠正我)PHP的时区字符串可能不适用于其他编程语言,也许其他语言有自己的时区处理'常量'。

如何在DB列中保存用户的时区首选项呢?如有任何意见,我们都非常感谢。

注意:PHP时区的有用之处在于,即使DST生效,它们也会自动考虑它,这非常棒。因此,您可以看到我对使用它们的兴趣,而不仅仅是存储数字偏移量。

和(纠正我,如果我错了)PHP的时区字符串可能不适合其他编程语言

好的,我会的。:)

PHP实现了IANA/Olson/TZDB/ZoneInfo数据库(相同的东西有很多名字)。这是最接近行业标准的东西,几乎在所有编程语言和平台上都实现了。

唯一不支持它的操作系统是Microsoft Windows,因为Microsoft维护自己的时区数据库。所以对于以windows为中心的平台,比如。net,如果你想要支持那种风格的时区,你必须使用一些库。

在时区标签wiki中阅读更多内容,或在Wikipedia上阅读。

所以是的-您只需将时区id字符串存储为varchar。这是最好的办法。