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.)