一尘不染

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

mysql

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

我有一个名为“用户”的MySQL表。现在,在此表上,我希望有一列包含用户居住地的时区(由用户提供,将从列表中选择)。我正在使用PHP,其中包含类似以下时区字符串的列表:

美国时区列表

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

现在我考虑一下,这将假定我将始终使用PHP与该数据库表进行交互,尽管现在是正确的,但将来可能不是这样。并且(如果我错了,请纠正我)PHP的时区字符串可能不适用于其他编程语言,也许其他语言有自己的“常量”来处理时区。

那么,您将如何处理在DB列中保存用户的时区首选项?任何想法肯定表示赞赏。

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


阅读 617

收藏
2020-05-17

共1个答案

一尘不染

并且(如果我错了,请纠正我)PHP的时区字符串可能不适用于其他编程语言

好的,我会。:)

PHP实现了IANA / Olson / TZDB / ZoneInfo数据库(同一事物的许多名称)。这是最接近行业标准的东西,并且几乎在每种编程语言和平台中都可以实现。

唯一不本地支持它的操作系统是Microsoft
Windows,因为Microsoft维护自己的时区数据库。因此,对于以Windows为中心的平台(如.Net),如果要支持该时区样式,必须使用某些

时区标签WikiWikipedia上了解更多信息。

是的-您只需将时区ID字符串存储为varchar。那是最好的事情。

2020-05-17