gpt4 book ai didi

php - mysqli 无法在连接上设置 session 时区。保持 UTC。在 RDS mysql 实例上

转载 作者:行者123 更新时间:2023-11-28 23:58:47 24 4
gpt4 key购买 nike

我在 AWS 上使用 mysql RDS 实例版本 5.5.40-log。

我正在使用 PHP 5.5.12 并连接到 mysqli。

我一直在尝试追踪脚本中的一个 sql 错误,发现尽管在与“澳大利亚/悉尼”的连接上设置了时区,但它仍然是 UTC 并且对 now() 的 sql 调用返回了错误的时间。所以我的结果出来了。

下面是我进行的简化调用,尽管 TZ 更改对 now() 的结果没有影响。

$db = new mysqli("axxxx.chxxxxx.ap-soxxxxt-2.rds.amazonaws.com", "xxxx", "xxxxx", "xxxx");
$db->query("SET timezone = 'Australia/Sydney'");

$res = $db->query("SELECT @@session.time_zone tz, now() now");


for ($row_no = $res->num_rows - 1; $row_no >= 0; $row_no--) {
$res->data_seek($row_no);
$row = $res->fetch_assoc();
echo " id = " . $row['tz'] . "\n";
echo " now = " . $row['now'] . "\n";
}

这导致:

id = UTC 现在 = 2015-06-07 01:46:05

这里的实际时间是11:46。

如果我通过 mysqlworkbench 登录到 mysql 数据库并运行相同的代码它有效。所以问题似乎是 session TZ 没有在 php mysqli 连接上设置,我不确定为什么?

我可以看到 mysql.time_zone_name 表的填充类似于:

非洲/阿比让 1非洲/阿比让 2...等等

编辑

我在 mysqlworkbench 中创建了一个新的直接 session :

SELECT @@global.time_zone, @@session.time_zone; -- UTC UTC
SELECT now(); -- 2015-06-07 21:55:54 <<incorrect time

SET time_zone = 'Australia/Sydney';

SELECT @@global.time_zone, @@session.time_zone; -- UTC Australia/Sydney
SELECT now(); -- 2015-06-08 07:55:03 <<correct time

我在示例中使用了@@session.time_zone,因为这是在直接设置时区系统设置时更新的变量。

通过 mysqli 和 php 复制相同的东西不会更新它并且 now() 函数不会返回正确的日期。因此缺少了一些东西。

最佳答案

您正在设置 timezone 变量,但选择 @@session.time_zone。正确的方法是设置 @@session.time_zone 变量:

mysql> SET @@session.time_zone='Australia/Sydney';
Query OK, 0 rows affected (0.01 sec)

mysql> SELECT @@session.time_zone;
+---------------------+
| @@session.time_zone |
+---------------------+
| Australia/Sydney |
+---------------------+
1 row in set (0.00 sec)

关于php - mysqli 无法在连接上设置 session 时区。保持 UTC。在 RDS mysql 实例上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30689335/

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