#mysql #datetime #phpmyadmin #default
#mysql #datetime #phpmyadmin #По умолчанию
Вопрос:
У меня есть веб-приложение, которое регистрирует некоторые события (не важно, какие). Мой веб-сервер находится в другом часовом поясе, я хочу зарегистрировать дату и время моего часового пояса.
Я создал простую таблицу БД с полями: ID - BIGINT
(автоматическое увеличение), primary key
WH - DATETIME
(это проблематично) LOG_TEXT VARCHAR(255)
(текст события)
поле, которое является проблемным, я могу установить только CURRENT_TIMESTAMP
, но показывает на 6 часов меньше, чем мое текущее время в часовом поясе.
Итак, я попытался установить значение по умолчанию для поля WH (в phpMyAdmin) со следующим: CONVERT_TZ(WH,@@global.time_zone,' 01:00')
phpMyAdmin показывает мне следующую ошибку:
#1067 - invalid default value for 'WH'
любая помощь, как настроить другой часовой пояс для CURRENT_TIMESTAMP?
PS: Я много гуглил, нет ответа, соответствующего этому вопросу PPS: я не могу изменить часовой пояс на своем сервере, это общий хостинг, и это просто невозможно.
заранее спасибо за ваши ценные комментарии.
Комментарии:
1. В долгосрочной перспективе вам почти всегда лучше хранить в UTC, а затем менять часовой пояс на свой локальный при извлечении данных обратно. Что, если вы переместите? Что, если сервер переместится? Или просто отключается на несколько часов? Использование UTC всегда предотвратит непредвиденные проблемы из-за подобных вещей.
Ответ №1:
В файле конфигурации mysql (my.cnf) установите строку ниже и перезапустите mysql
default-time-zone=' 01:00'
Или войдите в mysql с root и введите запрос ниже
SET GLOBAL time_zone = ' 1:00';
Комментарии:
1. я знаю об этом, но, как я уже упоминал, я использую общий хостинг, поэтому у меня нет привилегий root. Просто — я не могу изменить системные настройки для mysql. Единственный способ записать другой часовой пояс в мою БД — это использовать CONVERT_TZ.. Я могу выбирать значения в своем часовом поясе, используя эту команду convert, но я думаю, что гораздо проще использовать правильное значение по умолчанию в моей таблице DB, чем усложнять выбор. Я думаю, что я создам
VIEW
, где я буду преобразовывать часовой пояс
Ответ №2:
Вы можете создать ТРИГГЕР перед ВСТАВКОЙ для обновления даты и времени
Ответ №3:
Итак, вот как я решил свою проблему:
- Создано представление с теми же полями, но поле
WH
было увеличено на 6 часов. Я знаю, что это не лучший вариант, но все мои данные обрабатываются в том же часовом поясе (UTC 6)
Теперь в этом представлении хранятся правильные данные с меткой времени, однако в исходной LOG
таблице есть временная метка системного часового пояса. Поле WH
в таблице LOG
имеет значение по умолчанию CURRENT_TIMESTAMP
Теперь я могу просматривать свои журналы, выбирая значения из V_LOG
.
SQL:
CREATE ALGORITHM=UNDEFINED DEFINER=`myuser`@`localhost` SQL SECURITY DEFINER VIEW `V_LOG`
AS
SELECT ID, DATE_ADD(WH,interval 6 HOUR) AS WH,LOG_TEXT FROM LOG;
Я не смог использовать CONVERT_TZ с @@global.time_zone, потому что представления не могут содержать параметры.