我在我的MySQL Server 5.6上添加了时区支持,在Windows 2008 Server上运行。我已将默认时区设置为GMT,效果很好。另外,我按照http://dev.mysql.com/downloads/timezones.html的说明获取了时区描述表。
时区信息现在存储在mysql数据库下。
我的其他数据库正在使用带外键的Innodb引擎任何需要日期和时间的字段都以TIMESTAMP格式存储。在我的一个名为Company的表格中,我需要提及他们的时区。
我有两个问题;
我是否应该将时区设为个别公司,或该公司所属的城市/州/地区
理想情况下,我想将他们的时区与引用外国人的地区联系起来。但是如果时区id等在mysql数据库中,我怎么可能,我不希望普通的mysql用户有权访问。
处理此类问题的最佳做法是什么。
答案 0 :(得分:0)
在我看来,你不应该尝试通过数据库来管理时区。
如果您在PHP中使用PHP,则可以轻松翻译时区。 对于日期或任何事情:不要使用TIMEZONE !利用时间戳的优势:
http://fr.php.net/time:<?php time(); ?>
答案 1 :(得分:0)
我应该为某个公司或该公司所属的城市/州/地区分配时区吗?
这非常依赖于应用程序,但通常您应该考虑将时区分配给公司的特定位置。拥有多个办事处的公司可能会在不同的时区拥有它们。但是你应该考虑一下这对你的特定用例意味着什么。
尝试为区域分配时区通常不是一个好主意,因为有太多边缘情况。有许多国家和州有多个时区,还有一些城市也有这么好的时间(虽然不常见)。
通常,时区被分配给单个用户或特定事件。这取决于您的应用程序需要什么。
理想情况下,我想将他们的时区与引用的时区联系起来。但是如果时区id等在mysql数据库中,那我怎么可能呢?我不希望普通的mysql用户有权访问。
MySQL使用IANA/Olson time zone database。 (另请参阅timezone tag wiki和wikipedia。)
由于.Net不使用此数据,如果您想要与数据库对齐,则需要使用库,例如Noda Time或TZ4Net。 (我强烈推荐Noda Time。)
当然,只有在您确实需要使用数据库中的时区时才需要这样做。通常,你没有这样的要求。
处理此类问题的最佳做法是什么。
有一整套最佳做法here。但是,您应该做的很大程度上取决于您的实际要求。没有一个适合所有人的答案。
通常,最好的方法是在数据库中以UTC格式存储值,然后转换为特定时区以及从特定时区进行转换以进行显示。在这种情况下,您根本不需要数据库中的时区数据,您可以选择使用IANA时区,或使用.Net的TimeZoneInfo
类附带的Windows时区。
您在数据库中可能需要时区支持的示例是,如果您有一些要求,例如“我想要按日分组的报告,其中某一天是在特定时区的本地定义的。哦,我希望该报告的每个观众都有自己的本地数据视图,这些视图根据他们对“日”的概念进行调整。“