mysql - 存储较长时间和时区的统计数据

标签 mysql database date database-design timezone

目前我正在从事一个计算数据并将其按 ID 存储在分析数据库中的项目。

例如,一篇新闻文章的阅读次数(因此有大约 20 个类别的数据存储为整数)。

我们将数据存储在如下字段中: int user_id int value_type_id 整数值 日期时间日期时间

我们使用 4 个表,x_hour, x_day, x_week, x_month 这样我们就不必计算可能有几千甚至几百万条记录的数据。

数据需要即时计算并通过某些连接进行过滤。 这一切都没有问题,并且以令人满意的速度按预期工作。

接下来的问题。我们希望数据显示在查看它的用户的时区中,时区并不总是相同的,因为它可能是反时区,例如 UTC-5 或 UTC+4。

由于我们将日期存储在 UTC 上,因此我们在日、周和月的间隔方面遇到了问题,因为如果事件在午夜前一小时存储,则较大的间隔会将其视为昨天,即使它可能在同一天那个时区。

我读到的解决方案是添加 24 列来保存每个时区的数据,有没有人有不同的解决方案。

最佳答案

继续以 UTC 格式存储日期时间。

将用户的时区传递给查询。

SELECT 中转换,使用 CONVERT_TZ功能:

CONVERT_TZ(`datetimefield`, 'UTC', 'Europe/Amsterdam')

其中“欧洲/阿姆斯特丹”被替换为适当的时区。

您最好使用上面的 IANA 时区字符串,而不是像“UTC-5”这样的偏移量,只要您有可用的数据。它将正确处理发生这种情况的地区围绕夏令时的问题。

进一步说明:https://dev.mysql.com/doc/refman/5.5/en/mysql-tzinfo-to-sql.html - 该程序用于使用时区数据初始化 MySQL。

关于mysql - 存储较长时间和时区的统计数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15761450/

相关文章:

mysql - brew install mysql 在 mountain lion 上遵循这个 SO 失败

php - 我的 INSERT 准备好的语句正在使用 PHP PDO 制作多条记录

java - Hibernate 和 Postgresql 负主键 id 问题

javascript - 您如何从 bigcartel 的服务器获取当前时间?

python - 如何将Python对象类型(应该是Python日期类型)列转换为Python日期列?

MySQL 添加到具有分组依据的列不显示所有行

java - 如何在没有框架的情况下使用java实体类管理关系(mysql)表

mysql - 设置正确的表结构以防止重复条目

php - phpmyadmin 数据库中表的数量 4

.net - .NET 中是否有一种简单的方法来获取数字的 "st"、 "nd"、 "rd"和 "th"结尾?