Folgefrage von /server/191331/should-servers-have-their-timezone-set-to-gmt-utc
Sollte die MySQL-Zeitzone auf UTC eingestellt sein oder sollte sie auf dieselbe Zeitzone eingestellt sein wie der Server oder PHP? (Wenn es nicht UTC ist)
Was sind die Vor- und Nachteile?
Antworten:
Es scheint, dass es keine Rolle spielt, welche Zeitzone sich auf dem Server befindet, solange Sie die richtige Zeit für die aktuelle Zeitzone eingestellt haben, die Zeitzone der von Ihnen gespeicherten Datums- / Uhrzeitspalten kennen und sich der Probleme mit der Sommerzeit bewusst sind.
Wenn Sie jedoch die Zeitzonen der Server steuern, mit denen Sie arbeiten, können Sie alles intern auf UTC einstellen und müssen sich keine Gedanken über Zeitzonen und Sommerzeit machen.
Hier sind einige Notizen, die ich gesammelt habe, wie man mit Zeitzonen als eine Art Spickzettel für mich und andere arbeitet, die Einfluss darauf haben können, welche Zeitzone die Person für ihren Server wählt und wie sie Datum und Uhrzeit speichert.
MySQL Timezone Cheatsheet
Anmerkungen:
GMT verwirrt Sekunden, weshalb UTC erfunden wurde.
Warnung! Verschiedene regionale Zeitzonen können aufgrund der Sommerzeit denselben Datums- / Uhrzeitwert erzeugen
Intern wird eine MySQL-Zeitstempelspalte als UTC gespeichert. Bei Auswahl eines Datums konvertiert MySQL diese jedoch automatisch in die aktuelle Sitzungszeitzone.
Beim Speichern eines Datums in einem Zeitstempel geht MySQL davon aus, dass sich das Datum in der aktuellen Sitzungszeitzone befindet, und konvertiert es zur Speicherung in UTC.
Auswählen einer Zeitstempelspalte im UTC-Format
Egal in welcher Zeitzone sich die aktuelle MySQL-Sitzung befindet:
Sie können auch den Server oder die globale oder aktuelle Sitzungszeitzone auf UTC setzen und dann den Zeitstempel wie folgt auswählen:
So wählen Sie die aktuelle Datums- und Uhrzeitangabe in UTC aus:
Beispielergebnis:
2015-03-24 17:02:41
Auswählen der aktuellen Datums- und Uhrzeitangabe in der Sitzungszeitzone
Auswählen der Zeitzone, die beim Start des Servers festgelegt wurde
Gibt "MSK" oder "+04: 00" für die Moskauer Zeit zurück. Es gibt (oder gab) beispielsweise einen MySQL-Fehler, bei dem die Sommerzeit nicht angepasst wird, wenn ein numerischer Versatz eingestellt wird
Um die aktuelle Zeitzone abzurufen
Es wird 02:00:00 zurückgegeben, wenn Ihre Zeitzone +2: 00 ist.
So erhalten Sie den aktuellen UNIX-Zeitstempel (in Sekunden):
So rufen Sie die Zeitstempelspalte als UNIX-Zeitstempel ab
So rufen Sie eine UTC-Datums- / Uhrzeitspalte als UNIX-Zeitstempel ab
Ruft eine aktuelle Zeitzone datetime von einer positiven UNIX-Zeitstempel-Ganzzahl ab
Ruft eine UTC-Datumszeit aus einem UNIX-Zeitstempel ab
Ruft eine aktuelle Zeitzone datetime von einer negativen UNIX-Zeitstempel-Ganzzahl ab
Es gibt 3 Stellen, an denen die Zeitzone in MySQL festgelegt werden kann:
Hinweis: Eine Zeitzone kann in zwei Formaten eingestellt werden:
in der Datei "my.cnf"
oder
@@ global.time_zone Variable
Um zu sehen, auf welchen Wert sie eingestellt sind
Verwenden Sie einen der folgenden Werte, um einen Wert festzulegen:
@@ session.time_zone Variable
Um es einzustellen, verwenden Sie eine der folgenden Optionen:
Sowohl "@@ global.time_zone variable" als auch "@@ session.time_zone variable" geben möglicherweise "SYSTEM" zurück, was bedeutet, dass sie die in "my.cnf" festgelegte Zeitzone verwenden.
Damit Zeitzonennamen funktionieren (auch für die Standardzeitzone), müssen Sie Ihre Zeitzoneninformationstabellen einrichten, die ausgefüllt werden müssen: http://dev.mysql.com/doc/refman/5.1/en/time-zone-support. html
Hinweis: Sie können dies nicht tun, da NULL zurückgegeben wird:
Richten Sie MySQL-Zeitzonentabellen ein
Damit Sie
CONVERT_TZ
arbeiten können, müssen die Zeitzonentabellen ausgefüllt seinWenn sie leer sind, füllen Sie sie mit diesem Befehl aus
Wenn dieser Befehl den Fehler " Daten zu lang für Spalte 'Abkürzung' in Zeile 1 " anzeigt, kann dies daran liegen, dass am Ende der Zeitzonenabkürzung ein NULL-Zeichen angehängt wird
Die Lösung besteht darin, dies auszuführen
(Stellen Sie sicher, dass die dst-Regeln Ihres Servers auf dem neuesten Stand sind.
zdump -v Europe/Moscow | grep 2011
https://chrisjean.com/updating-daylight-saving-time-on-linux/ )Den vollständigen DST-Übergangsverlauf (Daylight Saving Time) für jede Zeitzone anzeigen
CONVERT_TZ
Wendet auch alle erforderlichen DST-Änderungen an, die auf den Regeln in den obigen Tabellen und dem von Ihnen verwendeten Datum basieren.Hinweis:
Gemäß den Dokumenten ändert sich der Wert, den Sie für time_zone festgelegt haben, nicht. Wenn Sie ihn beispielsweise als "+01: 00" festlegen, wird die time_zone als Versatz von UTC festgelegt, der nicht der Sommerzeit folgt es wird das ganze Jahr über gleich bleiben.
Nur die genannten Zeitzonen ändern die Zeit während der Sommerzeit.
Abkürzungen wie
CET
werden immer eine Winterzeit undCEST
Sommerzeit sein, während +01: 00 immerUTC
Zeit + 1 Stunde ist und beide sich mit der Sommerzeit nicht ändern.Die
system
Zeitzone ist die Zeitzone des Host-Computers, auf dem MySQL installiert ist (es sei denn, MySQL kann dies nicht ermitteln).Weitere Informationen zur Arbeit mit der Sommerzeit finden Sie hier
verwandte Fragen:
Quellen:
quelle
table
setmodified
= '2016-07-07 08:10 +00: 00'UNIX_TIMESTAMP(NOW());
ebenso wie alle Ihre Verwendungen, beiCONVERT_TZ()
denen einer der Parameter `@@ session.time_zone ist. Um UTC-Datenzeiten zuverlässig in UNIX-Zeitstempel zu konvertieren, müssen Sie zunächst die Sitzungszeitzone festlegen.Dies ist ein funktionierendes Beispiel:
quelle
PHP und MySQL haben ihre eigenen Standard-Zeitzonenkonfigurationen. Sie sollten die Zeit zwischen Ihrer Datenbank und der Webanwendung synchronisieren, da sonst einige Probleme auftreten können.
Lesen Sie dieses Tutorial: So synchronisieren Sie Ihre PHP- und MySQL-Zeitzonen
quelle
date_default_timezone_set("America/Los_Angeles");
undmysql_query("SET time_zone='" . date('P', time()) . "'");
sehr elegant gearbeitet!Die Vor- und Nachteile sind ziemlich identisch. Es hängt davon ab, ob Sie dies wollen oder nicht.
Seien Sie vorsichtig, wenn sich die MySQL-Zeitzone von Ihrer Systemzeit unterscheidet (z. B. PHP). Wenn Sie die Zeit vergleichen oder mit dem Benutzer drucken, müssen Sie etwas basteln.
quelle