Mysql
 sql >> база данни >  >> RDS >> Mysql

Задайте часовата зона на базата данни на MySQL на GMT

Не, не е възможно да промените часовата зона за една база данни в MySQL екземпляр.

Можем да извлечем сървъра и клиента time_zone настройки със заявка, като тази:

SELECT @@global.time_zone, @@session.time_zone;

Можем също да променим часовата зона на клиента за сесия или да променим часовата зона за целия MySQL екземпляр.

Но трябва да сме ясно наясно с последствията, които тази промяна ще има върху съществуващите клиентски връзки, и как DATETIME и TIMESTAMP стойностите, които вече са съхранени в екземпляра, ще бъдат интерпретирани.

За да зададете time_zone на сървъра при стартиране на MySQL екземпляр, можем да променим /etc/my.cnf файл (или където и да се четат параметрите за инициализация на mysql екземпляр), под [mysqld] раздел:

[mysqld]
default-time-zone='+00:00' 

-- или --

Възможно е също (по-малко желателно) да добавите --default_time_zone='+00:00' опция за mysqld_safe

ЗАБЕЛЕЖКА: Промяната на настройката на часовата зона на MySQL сървъра НЕ променя стойностите, съхранени в съществуващите колони DATETIME или TIMESTAMP, НО тъй като ефективно променя контекста, в който тези съхранени стойности се интерпретират, ще изглежда, че всички стойности СА изместени. (Където 08:00 се приема за 8:00 часа CST, като time_zone на сървъра е променено от CST на GMT, същото това „08:00“ вече ще се приема за 8:00 GMT, което на практика би било 2:00 CST.

Също така имайте предвид, че колоните TIMESTAMP винаги се съхраняват в UTC, докато колоните DATETIME нямат часова зона.http://dev.mysql.com/doc/refman/5.5/en/datetime.html

Всяка клиентска сесия може да промени настройката на часовата зона за собствената си сесия:

SET time_zone='-06:00';

Но нищо от това наистина не „решава“ проблема с преобразуването на часовата зона, а просто премества проблема с преобразуването.

Няма нищо по своята същност „лошо“ с приложния слой, обработващ преобразувания на часовата зона; понякога това е най-доброто място за работа. Просто трябва да се прави правилно и последователно.

(Странното в настройката, която описвате, е, че приложението съхранява стойности за DATETIME, сякаш часовата_зона на MySQL сървъра е зададена на GMT, но time_zone на MySQL сървъра е настроена на нещо друго.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Шаблон на хранилище без LINQ или друг ORM?

  2. Как да оставите да се присъедините към 2 таблици в 2 различни бази данни?

  3. MySQL пълно текстово търсене с частични думи

  4. Sql/Doctrine заявка за намиране на данни с множество условия с много към много асоциации

  5. Не можете да посочите целева таблица за актуализиране в клаузата FROM