Как узнать timezone phpmyadmin
Как установить часовой пояс в MySQL
Установить часовой пояс для определенного пользователя можно выполнив в консоли MySQL
SET time_zone = ‘+05:00’;
Чтобы изменения сохранились после перезагрузки и имели силу для всего сервера баз данных нужно задать глобальную переменную:
SET GLOBAL time_zone = ‘+5:00’;
Можно также указывать имя временной зоны — например, MSK для Москвы, но лучшей практикой является задавать часовой пояс определяя разницу с временем по Гринвичу как сделано выше
Также время опционально для конкретной сессии
mysql> set @@session.time_zone = ‘+00:00’;
Можно выяснить требуется ли задавать время для сессии выполнив:
mysql> SELECT @@global.time_zone, @@session.time_zone;
+———————+———————+
| @@global.time_zone | @@session.time_zone |
+———————+———————+
| SYSTEM | SYSTEM |
+———————+———————+
1 row in set (0.00 sec)
В данном случае время сессии совпадает с системным и непосредственное его задание не требуется.
Время в MySQL может указываться в TIMESTAMP и DATETIME
Общее правило для корректной работы приложения — время РНР должно совпадать с временем MySQL. Если корректируется время в РНР, то скорректировать его нужно и в MySQL.
Чаще всего на практике для сервера на котором работают один или несколько сайтов ценной оказывается команда:
SET GLOBAL time_zone = ‘+5:00’;
Кроме часового пояса MySQL приходится задавать часовой пояс в настройках РНР и системное время на сервере.
Настройка часового пояса MySQL
Хранение даты в MySQL с учетом часового пояса — непростая тема. Однако с ней обязательно нужно разобраться, чтобы сайты и приложения работали правильно.
Время и дату в MySQL можно указывать в TIMESTAMP и DATETIME.
Для определения времени с учетом часового пояса MySQL можно отредактировать конфигурационный файл или использовать переменные. Мы рассмотрим оба способа.
Как установить время MySQL в конфигурационном файле
Самая большая проблема — найти конфигурационный файл my.cnf. Он может храниться как минимум в 5 местах:
Если вы нашли конфигурационный файл, то дальше уже сложностей не будет. Чтобы установить часовой пояс, добавьте в секцию [mysqld] следующую строку:
В этом случае мы прибавляем 2 часа относительно UTC — всемирного координированного времени. Поддерживаются также другие значения:
Чтобы применить конфигурацию, перезапустите MySQL.
Как установить часовой пояс MySQL через переменные
Чтобы изменить часовой через переменные в консоли, нужны права суперпользователя. Авторизуйтесь под root и укажите пароль. Затем посмотрите текущие дату и время. Сделать это можно командой
Если хотите вывести только время (без даты), выполните в консоли
Установить часовой пояс для конкретного пользователя можно через консоль, выполнив команду
В качестве примера мы поставили время, которое смещено относительно UTC на 2 часа. Однако у такого подхода есть большой недостаток. Если в стране принято переводить часы на летнее/зимнее время, то запрос обрабатывается неверно. В зависимости от текущего периода можно получить время на час больше или меньше. Чтобы устранить эту особенность, задайте временную зону в таком формате:
Однако и у такого подхода есть свои подводные камни. Например, в стране могут измениться правила перехода на зимнее и летнее время. В России за последнее десятилетие это случилось два раза: сначала перешли на летнее время, отказавшись от зимнего, а затем сделали наоборот — отказались от летнего, оставив только зимнее. Поэтому нужно следить за актуальностью данных и вносить изменения в часовые пояса MySQL вручную.
Чтобы изменения сохранялись после перезагрузки и применялись ко всему серверу баз данных, используйте глобальную переменную:
Также можно задавать время опционально для одной сессии. Для этого выполните команду
Можно проверить, требуется ли задавать время для конкретной сессии, выполнив команду
Если время сессии совпадает с системным, то задавать его отдельно не требуется.
Для корректной работы веб-приложения время PHP и MySQL должны совпадать. Если вы корректируете время в PHP, то нужно изменить часовой пояс MySQL, и наоборот.
Как мне узнать текущий часовой пояс MySQL?
Кто-нибудь знает, есть ли в MySQL такая функция?
ОБНОВЛЕНИЕ
Это не выводит никакой действительной информации:
15 ответов
Текущие значения глобальных часовых поясов и часовых поясов конкретного клиента можно получить следующим образом:
mysql> SELECT @@global.time_zone, @@session.time_zone;
Но весь вопрос о том, какой часовой пояс использует сервер MySQL, может быть касательным, потому что запрос сервера, в каком часовом поясе он находится, не говорит вам абсолютно ничего о данных в базе данных. Читайте подробности:
Дальнейшее обсуждение :
Это устанавливает часовой пояс на GMT, так что любые дальнейшие операции (например, now() ) будут использовать GMT.
Однако обратите внимание, что значения времени и даты не хранятся вместе с информацией о часовом поясе в MySQL:
Почему предполагается, что данные были записаны с использованием часового пояса сервера? Ну, с одной стороны, данные могли быть записаны с использованием соединения, которое установило другой часовой пояс. База данных могла быть перемещена с одного сервера на другой, где серверы находились в разных часовых поясах (я столкнулся с этим, когда унаследовал базу данных, переехавшую из Техаса в Калифорнию). Но даже если данные записываются на сервере с его текущим часовым поясом, они все равно неоднозначны. В прошлом году в США переход на летнее время был отключен в 2 часа ночи 1 ноября. Предположим, что мой сервер находится в Калифорнии, используется тихоокеанский часовой пояс, и у меня есть значение 2009-11-01 01:30:00 в базе данных. Когда это было? Это было в 1:30 1 ноября по тихоокеанскому времени или 1:30 1 ноября по тихоокеанскому времени (на час позже)? У вас нет абсолютно никакого способа узнать. Мораль: всегда храните дату / время в GMT (в котором не используется летнее время) и конвертируйте в нужный часовой пояс по мере необходимости.
Просто SELECT @@system_time_zone;
Возвращает PST (или что-то еще, имеющее отношение к вашей системе).
Если вы пытаетесь определить часовой пояс сеанса, вы можете использовать этот запрос:
SELECT IF(@@session.time_zone = ‘SYSTEM’, @@system_time_zone, @@session.time_zone);
Что вернет часовой пояс сеанса, если он отличается от часового пояса системы.
Чтобы получить текущее время в соответствии с вашим часовым поясом, вы можете использовать следующее (в моем случае это ‘+5: 30’)
выберите DATE_FORMAT (convert_tz (now (), @@ session.time_zone, ‘+ 05:30’), ‘% Y-% m-% d’)
Запрос ниже возвращает часовой пояс текущего сеанса.
Чтобы получить текущий часовой пояс mysql, вы можете сделать следующее:
Теперь, если вы хотите изменить часовой пояс mysql, тогда:
Кому угодно найти часовой пояс mysql db.
С помощью этого запроса вы можете получить текущий часовой пояс:
Если вам нужна разница по Гринвичу в виде целого числа :
Команда, упомянутая в описании, возвращает «СИСТЕМУ», что указывает на то, что она принимает часовой пояс сервера. Что бесполезно для нашего запроса.
Следующий запрос поможет понять часовой пояс
UTC_TIMESTAMP
В MySQL UTC_TIMESTAMP возвращает текущую дату и время в формате UTC в виде значения в формате ГГГГ-ММ-ДД ЧЧ: ММ: СС или ГГГГММДДЧЧММСС.uuuuuu в зависимости от использования функции, то есть в строковом или числовом контексте.
СЕЙЧАС ()
СЕЙЧАС () функция. MySQL NOW () возвращает значение текущей даты и времени в формате «ГГГГ-ММ-ДД ЧЧ: ММ: СС» или формате ГГГГММДДЧЧММСС.uuuuuu в зависимости от контекста (числового или строкового) функции. CURRENT_TIMESTAMP, CURRENT_TIMESTAMP (), LOCALTIME, LOCALTIME (), LOCALTIMESTAMP, LOCALTIMESTAMP () являются синонимами NOW ().
Ознакомьтесь с поддержкой часовых поясов сервера MySQL и system_time_zone системная переменная. Это помогает?
Как получить текущий часовой пояс MySQL?
кто-нибудь знает, есть ли такая функция в MySQL?
обновление
это не выводит никакой действительной информации:
16 ответов
текущие значения глобальных и клиентских часовых поясов можно получить следующим образом:
mysql> SELECT @@global.time_zone, @@session.time_zone;
но весь вопрос о том, какой часовой пояс использует сервер MySQL, может быть касательной, потому что, спрашивая сервер, в каком часовом поясе он говорит вам абсолютно ничего о данных в базе данных. Прочитайте детали:
дальнейшего обсуждения:
если вы контролируете сервер, конечно, вы можете убедиться, что часовой пояс является известным количество. Если вы не контролируете сервер, вы можете установить часовой пояс, используемый вашим подключение такой:
это устанавливает часовой пояс в GMT, так что любые дальнейшие операции (например, now() ) будет использовать GMT.
обратите внимание, что значения времени и даты не хранится с информацией часового пояса в MySQL:
почему предполагается, что данные были написано с использованием часового пояса сервера? Ну, во-первых, данные могли быть записаны с помощью соединения, которое установило другой часовой пояс. Возможно, база данных была перемещена с одного сервера на другой, где серверы находились в разных часовых поясах (я столкнулся с этим, когда унаследовал базу данных, которая переехала из Техаса в Калифорнию). Но!—21—>даже если данные записаны на сервере, с его текущим часовым поясом, это все еще неоднозначно. В прошлом году, в США, дневной свет Экономия времени была отключена в 2 часа ночи 1 ноября. Предположим, мой сервер находится в Калифорнии, используя Тихоокеанский часовой пояс, и у меня есть значение 2009-11-01 01:30:00 в базе данных. Когда это было? Было ли это 1: 30 утра 1 ноября PDT или 1: 30 ночи 1 ноября PST (час спустя)? У вас нет абсолютно никакого способа знать. Мораль: всегда храните даты/время в GMT (который не делает DST) и преобразуйте в нужный часовой пояс по мере необходимости.
Как получить текущий часовой пояс MySQL?
кто-нибудь знает, есть ли такая функция в MySQL?
обновление
это не выводит никакой действительной информации:
16 ответов:
текущие значения глобальных и клиентских часовых поясов могут быть получены следующим образом:
mysql> SELECT @@global.time_zone, @@session.time_zone;
но весь вопрос о том, какой часовой пояс использует сервер MySQL, может быть касательным, потому что спрашивать сервер, в каком часовом поясе он находится, говорит вам абсолютно ничего о данных в базе данных. Читайте дальше для деталей:
дальнейшего обсуждения:
если вы контролируете сервер, конечно, вы можете убедиться, что часовой пояс известен количество. Если вы не контролируете сервер, вы можете установить часовой пояс, используемый вашим подключение такой:
это устанавливает часовой пояс в GMT, так что любые дальнейшие операции (например, now() ) будет использовать GMT.
заметим, однако, что время и дата значения не хранится с информацией о часовом поясе в MySQL:
почему предполагается, что данные были написано с использованием часового пояса сервера ошибочным? Ну, во-первых, данные могут быть записаны с использованием соединения, которое устанавливает другой часовой пояс. Возможно, база данных была перемещена с одного сервера на другой, где серверы находились в разных часовых поясах (я столкнулся с этим, когда унаследовал базу данных, которая переехала из Техаса в Калифорнию). Но даже если данные записаны на сервере, с его текущим часовым поясом, это все еще неоднозначно. В прошлом году, в Соединенных Штатах, дневной свет Экономия времени была отключена в 2:00 утра 1-го ноября. Предположим, что мой сервер находится в Калифорнии, с использованием Тихоокеанский часовой пояс и у меня есть значение 2009-11-01 01:30:00 в базе данных. Когда это было? Было 1:30 утра 1 ноября по тихоокеанскому времени, или 1:30 утра 1 ноября по тихоокеанскому времени (на час позже)? У вас нет абсолютно никакого способа знать. Мораль: всегда храните даты/время в GMT (что не делает DST) и конвертируйте в нужный часовой пояс по мере необходимости.