c# - MySQL 时区支持

标签 c# mysql date datetime timezone

我在 Windows 2008 Server 上运行的 MySQL Server 5.6 上添加了时区支持。我已将默认时区设置为 GMT,效果很好。此外,我已按照 http://dev.mysql.com/downloads/timezones.html 中的说明进行操作。获取时区描述表。

时区信息现在存储在 mysql 数据库下。

我的另一个数据库使用带有外键的Innodb引擎任何需要日期和时间的字段都以TIMESTAMP格式存储。在我的一个名为 Company 的表中,我需要引用他们的时区。

我有两个问题;

  • 我应该为单个公司分配时区,还是为该公司所属的城市/州/地区分配时区

  • 理想情况下,我想将他们的时区链接到外国时区,无论它是从哪里引用的。但是,如果时区 ID 等位于 mysql 数据库中,我不希望普通 mysql 用户有权访问该数据库,这怎么可能。

处理此类问题的最佳实践是什么。

最佳答案

Should I be assigning a timezone to a individual company, or to a city/state/region to which that company belongs to?

这非常依赖于应用程序,但一般来说,您应该考虑将时区分配给公司的特定位置。拥有多个办事处的公司可能位于不同的时区。但您应该考虑这对您的特定用例意味着什么。

尝试为一个区域分配时区通常不是一个好主意,因为有太多的边缘情况。许多国家和州都有多个时区,还有一些城市也有多个时区(尽管并不常见)。

时区通常被分配给单个用户或特定事件。这仅取决于您的应用程序的需求。

Ideally I'd like to link their timezone, where ever it is referenced from with a foreign. But how is that possible if the timezone ids etc are in the mysql database, which I don't want a normal mysql user having access to.

MySQL 使用IANA/Olson time zone database 。 (另请参阅 timezone tag wikiwikipedia。)

由于 .Net 不使用此数据,如果您想将数据与数据库保持一致,您将需要使用一个库,例如 Noda TimeTZ4Net 。 (我强烈推荐野田时间。)

当然,只有当您确实需要使用数据库中的时区时才需要这样做。通常,您不会有这样的要求。

What are the best practices for dealing with this sort of issue.

有一整套最佳实践here 。但是,您应该做什么很大程度上取决于您的实际要求。没有一刀切的答案。

通常,最好的方法是将 UTC 值存储在数据库中,并在特定时区之间进行转换以进行显示。在这种情况下,您的数据库中根本不需要时区数据,您可以选择使用 IANA 时区,或使用 .Net 的 TimeZoneInfo 类附带的 Windows 时区.

您的数据库中可能需要时区支持的一个示例是,如果您有一些要求,例如“我想要一份按天分组的报告,其中一天是在特定时区本地定义的。哦,我希望该报告的每个查看者都有自己的本地数据 View ,并根据他们对“一天”的理解进行调整。”

关于c# - MySQL 时区支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21480551/

相关文章:

c# - 如何使用 async/await 调用网络服务?

php - Laravel DB mysql 选择数组中列的位置?

php - 如何合并 2 个 Select 查询

java - 以原始时区打印日期

javascript - 我如何使用 momentjs 找到上周一?

c# - 长路径\\?\解决方法不适用于某些安装

c# - 调试多线程应用程序

c# - 模拟管理系统?

mysql - 带 Join 的关联子查询

SQL查询以查找日期之间差异的平均值