Изменить часовой пояс MySQL без супер-разрешений - PullRequest
2 голосов
/ 29 мая 2011

Я добавил эту строку в мой файл config.inc.php.

$query = "SET SESSION time_zone = 'Europe/Rome'";
if (mysql_query($query, DB_LINK) == FALSE) {
    die(mysql_error(DB_LINK));
}

Это не дает мне никакой ошибки, но когда я использую функцию NOW() или CURRENT_TIMESTAMP(), это сохраняетзапись с неправильным временем.

Как я могу установить часовой пояс даты в MySQL без супер-разрешений?

Ответы [ 2 ]

0 голосов
/ 29 мая 2011

Если вы используете 5.5, если вы видите http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html,, это говорит:

mysql> SET time_zone = timezone;

Там также написано:

The current session time zone setting affects display and storage of time values that are zone-sensitive. This includes the values displayed by functions such as NOW() or CURTIME(), and values stored in and retrieved from TIMESTAMP columns. Values for TIMESTAMP columns are converted from the current time zone to UTC for storage, and from UTC to the current time zone for retrieval.

The current time zone setting does not affect values displayed by functions such as UTC_TIMESTAMP() or values in DATE, TIME, or DATETIME columns. Nor are values in those data types stored in UTC; the time zone applies for them only when converting from TIMESTAMP values. If you want locale-specific arithmetic for DATE, TIME, or DATETIME values, convert them to UTC, perform the arithmetic, and then convert back. 

Так что попробуйте без SESSION и посмотрите, работает ли он, а также убедитесь, что select @@session.time_zone; дает вам правильный часовой пояс.

РЕДАКТИРОВАТЬ: у вас просто может быть проблема с вашей базой данных. Я только что попробовал это на одной из моих баз данных (5.5.8), и это сработало, но на 5.0.51 не получилось. Так что вам может потребоваться обновление БД.

mysql> select CURRENT_TIMESTAMP();
+---------------------+
| CURRENT_TIMESTAMP() |
+---------------------+
| 2011-05-29 14:33:06 |
+---------------------+
1 row in set (0.00 sec)

mysql> set time_zone = 'Europe/Rome';
Query OK, 0 rows affected (0.00 sec)

mysql> select CURRENT_TIMESTAMP();
+---------------------+
| CURRENT_TIMESTAMP() |
+---------------------+
| 2011-05-29 16:33:11 |
+---------------------+
1 row in set (0.00 sec)

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.5.8-log |
+-----------+
1 row in set (0.00 sec)
0 голосов
/ 29 мая 2011

Эмм, я не уверен, как установить часовой пояс с помощью mysql ...

, но я предпочитаю устанавливать часовой пояс с помощью php ...

date_default_timezone_set('Europe/Rome');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...