如何处理PHP+;MySQL时区和MySQL按[日期]分组查询?
我正在使用Drupal7、PHP和MySQL,并试图在从MySQL数据库查询时了解时区问题 Drupal可以很好地处理日期:所有日期都以UTC timestamp int的形式存储在数据库中,并且使用PHP5的内置时区功能(因此每次运行PHP脚本时,脚本的时区都设置为当前用户的时区),通过每个用户配置文件中的时区设置,对每个用户进行时区转换 因此,只要我们坚持使用PHP,这一切都很好、很好、相当轻松 当我们引入MySQL时,事情开始变得棘手,因为似乎没有办法将当前PHP脚本时区与给定的MySQL查询完全同步。似乎最佳实践要求在PHP中处理所有时区转换:只查询数据库中的原始时间戳,然后根据需要在PHP中进行转换 在大多数情况下,这似乎是合理的(即使有时稍微慢一点),但是我应该如何处理MySQL GROUP BY[date]查询呢?例如,我正在构建一个模块来处理分析,并且经常想做以下事情:如何处理PHP+;MySQL时区和MySQL按[日期]分组查询?,php,mysql,drupal,datetime,timezone,Php,Mysql,Drupal,Datetime,Timezone,我正在使用Drupal7、PHP和MySQL,并试图在从MySQL数据库查询时了解时区问题 Drupal可以很好地处理日期:所有日期都以UTC timestamp int的形式存储在数据库中,并且使用PHP5的内置时区功能(因此每次运行PHP脚本时,脚本的时区都设置为当前用户的时区),通过每个用户配置文件中的时区设置,对每个用户进行时区转换 因此,只要我们坚持使用PHP,这一切都很好、很好、相当轻松 当我们引入MySQL时,事情开始变得棘手,因为似乎没有办法将当前PHP脚本时区与给定的MySQL
GROUP BY YEAR(FROM_UNIXTIME(u.created)), MONTH(FROM_UNIXTIME(u.created))
所以我们遇到了时区问题
脑海中浮现的可能解决方案:
非常感谢你的帮助我会考虑这样的一种方法:
SET time_zone = '+02:00';
而且
GROUP BY FROM_UNIXTIME(u.created, '%Y-%m');
由于FROM_UNIXTIME
将其时间基于时区
,因此这将给出所需的结果
撤消<代码> TimeJavaSux>代码>更改后,考虑先保存,然后将其设置为保存值。
谢谢罗宾的想法。MySQL SET time_zone的问题在于其作用域适用于整个客户端连接,而不是特定的查询,据我所知,新时区将影响每个Drupal db查询。有没有办法绕过这个问题?然后保存默认的时区
,然后运行一个查询,将其重置为以前的值。如果我错了,请纠正我,但由于每分钟可能有数千次页面浏览,似乎无法保证在时区更改和重置之间不会执行其他查询。当然,无论如何我都感谢你的建议。。。我并没有想出更好的主意……据我所知,这只会影响当前的执行。一次执行一个查询。因此,我看这里没有问题<代码>每个连接时区。每个连接的客户端都有自己的时区设置,由会话时间\u区域变量给出。感谢Robin的帮助。尽管如此,我仍然对此感到谨慎。。。就Drupal而言,我不确定db“连接”何时开始和结束。。。你有这方面的知识吗?你能指出一些文件吗?