2010-12-30 2 views
11

В MySQL вы можете установить переменную сеанса с именем time_zone, чтобы изменить часовой пояс. Это полезно, например, при просмотре временных меток из другой страны. Вот пример:MySQL: установка time_zone в файле параметров my.cnf

mysql> select now(); 
+---------------------+ 
| now()    | 
+---------------------+ 
| 2010-12-30 18:59:18 | 
+---------------------+ 
1 row in set (0.00 sec) 

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

mysql> select now(); 
+---------------------+ 
| now()    | 
+---------------------+ 
| 2010-12-30 09:59:29 | 
+---------------------+ 
1 row in set (0.00 sec) 

Можно ли разместить это в файле параметров, например. .my.cnf?

Когда я пытаюсь, он не работает. Все, что я получаю:

mysql: unknown variable 'time_zone=Brazil/East' 
+1

Какая у вас операционная система? –

ответ

16

должно быть

default_time_zone=Brazil/East 

детали: http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_time_zone

Формат Option-File = default_time_zone

+0

Спасибо. Это работает. – emx

+0

Я получаю 'mysql: [ERROR] неизвестную переменную 'default_time_zone = Brazil/East'', ставя ее в свой'/etc/mysql/conf.d/mysql.cnf' в разделе '[mysql]'. Версия 5.7.20. – kev

+0

Помещение под '[mysqld]' приводит к тому, что сервер не перезагружается и не выходит из: 'Работа для mysql.служба завершилась неудачей, потому что процесс управления завершился с кодом ошибки. Подробнее см. «Systemctl status mysql.service» и «journalctl -xe». – kev

1

Я не уверен, что изменилось в Xampp, но это решение работает, только если вы поместите эту строку в нужное место. Поверьте мне, я много раз пробовал и должен был провести тщательный поиск, чтобы найти это решение.

default-time-zone = "+00:00" 

Пример:

read_rnd_buffer_size = 512K 
myisam_sort_buffer_size = 8M 
default-time-zone = "+00:00" <--- Place here. 
log_error = "mysql_error.log" 

https://community.apachefriends.org/f/viewtopic.php?f=16&t=47656

Кроме того, вы хотите быть уверены, что у вас есть база данных заполняется с соответствующими названиями часовых поясов, если вы собираетесь использовать «Америка /Лос-Анджелес". Я бы рекомендовал использовать смещение. Я бы рекомендовал использовать UTC в качестве базы, а затем преобразовать свое время с этого момента для пользователей на основе их часового пояса, что позволит вам сэкономить много головных болей позже и сохранить вашу базу данных красивой и единообразной. Ознакомьтесь с руководством, которое я привел ниже, и объяснил это очень четко для меня, и я использовал эту систему. Есть много способов кодировать его, но такой подход сэкономит вам массу проблем.

http://www.vertabelo.com/blog/technical-articles/the-proper-way-to-handle-multiple-time-zones-in-mysql

1

Немного поздно, но это может быть полезно, тем не менее:

При явной установки часового пояса, убедитесь, что вы используете правильное имя часового пояса, имея в виду многие из них устарели. Вы можете использовать https://en.wikipedia.org/wiki/List_of_tz_database_time_zones для подтверждения.

В моем случае, используя MySQL 5.7, устаревшее имя часового пояса не работало при добавлении его под [mysqld] в мой файл mysqld.cnf. Сработало новое имя часового пояса и перезапуск службы mysql.

Таким образом, для пользователя @kev здесь, используя America/Sao_Paulo должен работать, вместо того чтобы использовать Бразилия/Восток.