gpt4 book ai didi

php - 如何处理MySQL中的时区?

转载 作者:行者123 更新时间:2023-11-29 03:34:25 25 4
gpt4 key购买 nike

我有一个脚本,它必须执行类似“Google Analytics”的任务。基本上显示用户的访问者统计信息。

我想在请求它的用户的时区生成报告。

到目前为止,我已经用这个写了一个代码:

SET time_zone = timezone;

它的作用是为每个 MySQL 连接设置时区。如果用户使用 timestamp 检索数据,时间戳将转换为连接的时区。我将 UTC 存储在时间戳中。

所以一切似乎都正常。但有人说这是错误的做法。因为多个用户无法连接到具有不同 time_zone 设置的数据库。

但是MySQL doc说:

Per-connection time zones. Each client that connects has its own time zone setting, given by the session time_zone variable. Initially, the session variable takes its value from the global time_zone variable, but the client can change its own time zone with this statement

但是他们坚持认为你根本不应该在 MySQL 中对时区做任何事情。您应该在您的(例如)PHP 代码中完成这一切。 Here与此答案类似的问题。

但是我怎样才能在 PHP 代码中做到这一点呢?我的意思是我知道如何在 PHP 中转换带有时区的时间,但这不像我在检索单行。

我正在检索数千行并按 timestamp 字段中的日期对它们进行 GROUP:

SELECT ... 
FROM logs
WHERE
user_id = :user_id
AND timestamp >= CURDATE()
GROUP BY DATE(timestamp)

mysql用timestamp这个索引很重要,因为我有几百万。即使我在时间戳 GROUP BY DATE(timestamp) 上使用函数,索引是否有效?如果不是,我还能如何做到这一点?

那么我应该怎么做呢?如果能提供一些建议,我将不胜感激。

最佳答案

现在 User 将所有时间戳转换为他的 tz 并使用 timestamp(*user) >= CURDATE(*user)。我认为另一种方式是

convert timestamp(user) to timestamp(server)

并使用

timestamp(*server) >= CURDATE(*server)

例子

dates =(5,6,7) 

(转换为我的 tz)dates-2 = (3,4,5)(直接用这个数组检查约束)biggerThan3 result=(4,5)第二种方式 (将约束转换为 ts 服务器)biggerThan3 -> biggerThan(3+2)5 (使用服务器数组检查约束)dates =(5,6,7) result=(6,7)结果可以转换为 (4,5)

关于php - 如何处理MySQL中的时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24950371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com