Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Stellen Sie die Zeitzone der MySQL-Datenbank auf GMT ein

Nein, es ist nicht möglich, die Zeitzone für eine einzelne Datenbank innerhalb einer MySQL-Instanz zu ändern.

Wir können die Server- und Client-time_zone abrufen Einstellungen mit einer Abfrage wie dieser:

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

Wir können auch die Client-Zeitzone für eine Sitzung oder die Zeitzone für die gesamte MySQL-Instanz ändern.

Aber wir müssen uns der Auswirkungen bewusst sein, die diese Änderung auf bestehende Client-Verbindungen haben wird, und wie DATETIME und TIMESTAMP bereits in der Instanz gespeicherte Werte werden interpretiert.

Damit die Server-Zeitzone beim Start der MySQL-Instanz festgelegt wird, können wir /etc/my.cnf ändern Datei (oder wo auch immer die Initialisierungsparameter der mysql-Instanz gelesen werden) unter [mysqld] Abschnitt:

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

-- oder --

Es ist auch möglich (weniger wünschenswert), den --default_time_zone='+00:00' hinzuzufügen Option zu mysqld_safe

HINWEIS: Das Ändern der Zeitzoneneinstellung auf dem MySQL-Server ändert NICHT die in vorhandenen DATETIME- oder TIMESTAMP-Spalten gespeicherten Werte, ABER da es den Kontext ändert, in dem diese gespeicherten Werte interpretiert werden, sieht es so aus, als würden alle Werte verschoben. (Wo 08:00 als 8:00 Uhr CST angenommen wurde und die Zeitzone des Servers von CST auf GMT geändert wurde, wird dieselbe '08:00' jetzt als 8:00 Uhr GMT angenommen, was effektiv 2:00 Uhr CST wäre.

Denken Sie auch daran, dass TIMESTAMP-Spalten immer in UTC gespeichert werden, während DATETIME-Spalten keine Zeitzone haben.http://dev.mysql.com/doc/refman/5.5/en/datetime.html

Jede Clientsitzung kann die Zeitzoneneinstellung für ihre eigene Sitzung ändern:

SET time_zone='-06:00';

Aber nichts davon "löst" wirklich das Zeitzonen-Konvertierungsproblem, es verschiebt nur das Konvertierungsproblem.

Es gibt nichts grundsätzlich „Schlechtes“, wenn die Anwendungsschicht Zeitzonenkonvertierungen handhabt; manchmal ist das der beste Ort, um damit umzugehen. Es muss nur richtig und konsequent gemacht werden.

(Das Seltsame an dem von Ihnen beschriebenen Setup ist, dass die App DATETIME-Werte speichert, als ob die Zeitzone des MySQL-Servers auf GMT eingestellt wäre, die Zeitzone des MySQL-Servers jedoch auf etwas anderes eingestellt ist.)