mysqli не в состоянии установить часовой пояс сеанса на соединении. Оставайтесь UTC. На экземпляре RDS mysql

Я на AWS использую экземпляр mysql RDS версии 5.5.40-log.

Я использую PHP 5.5.12 и соединяюсь с mysqli.

Я пытался отследить ошибку sql в скрипте и обнаружил, что, несмотря на установку часового пояса для соединения с «Австралия / Сидней», он остается в UTC, а вызов sql now () возвращает неправильное время. Так что мои результаты отсутствуют.

Ниже я делаю упрощенный вызов, который, несмотря на изменение 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.

Если я захожу в базу данных mysql через mysqlworkbench и запускаю тот же код оно работает. Таким образом, проблема, похоже, в том, что сеанс TZ не устанавливается в соединении php mysqli, и я не уверен, почему?

Я вижу, что таблица mysql.time_zone_name заполнена примерно так:

Африка / Абиджан 1
Африка / Абиджан 2
…так далее

РЕДАКТИРОВАТЬ

Я создаю новый прямой сеанс в mysqlworkbench:

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 в моем примере, так как эта переменная обновляется при установке системы time_zone напрямую.

Репликация того же самого через mysqli и php делает не обновите это, и функция now () не возвращает правильную дату. Следовательно, чего-то не хватает.

1

Решение

Вы устанавливаете 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)
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]