webentwicklung-frage-antwort-db.com.de

MySQL-Zeitzonen

Gibt es eine vollständige Liste der MySQL-Zeitzonen?

Es scheint, dass die gültigen Werte für time_zone in den MySQL-Einstellungen vom Host-Betriebssystem abhängig sind, aber ich konnte keine Liste möglicher Werte finden.

Ich brauche die Zeit, um Calgary Ortszeit anzuzeigen.

18
Gary

Aus der Dokumentation zu MySQL 5.7 (Hervorhebungsmine):

zeitzonenwerte können in verschiedenen Formaten angegeben werden. Keines davon ist Groß- und Kleinschreibung:

Der Wert 'SYSTEM' gibt an, dass die Zeitzone mit .__ identisch sein sollte. die Zeitzone des Systems.

Der Wert kann als Zeichenfolge angegeben werden, die einen Versatz von UTC angibt, z. B. als '+10: 00' oder '-6: 00'.

Der Wert kann als benannte Zeitzone angegeben werden, z. B. "Europa/Helsinki", "USA/Ost" oder "MWB". Benannte Zeitzonen können .__ sein. Wird nur verwendet, wenn die Zeitzonen-Informationstabellen in der MySQL-Datenbank wurden erstellt und bevölkert.

Es ist zu beachten, dass die Standardeinstellung der MySQL-Variable Zeitzone beim Start von MySQL auf SYSTEM gesetzt ist. Der SYSTEM-Wert wird von einer Betriebssystemeinstellung abgerufen (z. B. von der Datei, auf die der Symlink /etc/localtime verweist).

MySQLs Standardvariable Zeitzone kann beim Start mit einem anderen Wert initialisiert werden, indem die folgende Befehlszeilenoption bereitgestellt wird:

--default-time-zone=timezone

Wenn Sie den Wert in einer Optionsdatei angeben, sollten Sie die folgende Syntax verwenden, um die Variable festzulegen:

--default-time-zone='timezone'

Wenn Sie ein Benutzer von MySQL SUPER sind, können Sie die Variable SYSTEM time_zone zur Laufzeit über die Eingabeaufforderung MYSQL> mit der folgenden Syntax festlegen:

SET GLOBAL time_zone=timezone;

MySQL unterstützt auch individuelle SESSION Zeitzone-Werte, die standardmäßig den Wert der Umgebungsvariablen GLOBAL time_zone verwenden. Verwenden Sie die folgende Syntax, um den Zeitzone-Wert der Sitzung während einer SESSION zu ändern:

SET time_zone=timezone;

Um die vorhandenen MYSQL Zeitzone-Einstellungswerte abzufragen, können Sie die folgende SQL ausführen, um diese Werte zu erhalten:

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

Für das, was es wert ist, habe ich einfach die gültigen Werte für die mysql time_zone -Konfiguration gegoogelt und mir das erste Ergebnis angesehen.

18
Brian Driscoll

Standardmäßig (zumindest bei Debian-basierten Installationen) werden keine Zeitzonendaten in MySQL geladen. Wenn Sie testen möchten, ob sie geladen sind, führen Sie Folgendes aus:

SELECT CONVERT_TZ('2012-06-07 12:00:00', 'GMT', 'America/New_York');

Wenn eine DATETIME (in diesem Fall 2012-06-07 08:00:00) zurückgegeben wird, haben Sie Zeitzonen geladen. Wenn NULL zurückgegeben wird, ist dies nicht der Fall. Wenn nicht geladen, können Sie nur mit Offsets (z. B. +10:00 oder -6:00) konvertieren.

Dies sollte in vielen Fällen gut funktionieren, aber manchmal ist es besser, benannte Zeitzonen zu verwenden, z. B. um sich keine Sorgen über die Sommerzeit zu machen. Wenn Sie den folgenden Befehl ausführen, werden die Zeitzonendaten aus dem System geladen (nur Unix. Ich bin nicht sicher, wie der entsprechende Windows-Befehl aussehen würde):

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

Wenn Sie sich ständig auf MySQL-Zeitzonen verlassen müssen, sollte der obige Befehl jedes Mal ausgeführt werden, wenn die Systemzeitzone aktualisiert wird. Sie können es auch einfach zu einem wöchentlichen oder monatlichen Cron-Job hinzufügen, um es automatisch für Sie auszuführen.

Führen Sie anschließend die folgenden Schritte aus, um eine Liste mit Zeitzonen anzuzeigen:

USE mysql;
SELECT * FROM `time_zone_name`;

Beachten Sie, dass die Zeitzoneninformationen in MySQL ca. 5 MB belegen. Wenn Sie die Timezone-Informationen jemals entladen möchten, führen Sie einfach Folgendes aus und starten Sie MySQL neu:

TRUNCATE `time_zone` ;
TRUNCATE `time_zone_leap_second` ;
TRUNCATE `time_zone_name` ;
TRUNCATE `time_zone_transition` ;
TRUNCATE `time_zone_transition_type` ;

Nicht DROP diese Tabellen oder schlechte Dinge werden passieren.


Bearbeiten:

Basierend auf einem Benutzerkommentar unten müssen Sie, wenn Sie möchten, dass die Zeitzonen automatisch aktualisiert werden, wenn Sie das System aktualisieren, root die Anmeldung zulassen, ohne dass Sie zur Eingabe eines Kennworts aufgefordert werden.

MySQL> = 5.6.6

Führen Sie die folgenden [ source ] aus:

mysql_config_editor set --login-path=client --Host=localhost --user=root --password

MySQL <5.6.6

Erstellen Sie eine ~/.my.cnf-Datei (falls noch nicht vorhanden) und fügen Sie Folgendes hinzu:

[client]
user=root
password=yourMysqlRootPW

Führen Sie dann chmod 600 ~/.my.cnf aus, um sicherzustellen, dass niemand es lesen kann.

Skript aktualisieren

Fügen Sie das folgende Skript zu crontab hinzu, um es einmal pro Tag auszuführen:

#!/bin/bash
# Find if there are any timezone files that have been modified in the last 24   
# hours and do not have ".tab" in the name (since these are not timezone files) 
if [ `find /usr/share/zoneinfo -mtime -1 | grep -v '\.tab' | wc -l` -gt 0 ]; then
    echo "Updating MySQL timezone info"
    # Note, suppressing STDERR here because of the .tab files above
    # that cause warnings.
    mysql_tzinfo_to_sql /usr/share/zoneinfo 2>/dev/null | mysql -u root mysql
    echo "Done!\n"
fi

Entfernen Sie die echo-Zeilen, wenn Sie keine Ausgabe wünschen.

Hinweis: Dies ist (meistens) nicht getestet. Lassen Sie mich wissen, wenn Sie Probleme haben, und ich werde diese Antwort aktualisieren.

42
Mike

Ich habe einen Gist erstellt.

https://Gist.github.com/4134305

https://Gist.github.com/kinjal/9105369

Ich hoffe die Leute finden es nützlich.

5
Kinjal Dixit

Eine vollständige Liste von Zeitzonen kann download von der MySQL-Website als Datenbanktabellen heruntergeladen werden, die in den MySQL-Server importiert werden.

Für die Calgary-Zeit können Sie UTC-Offsets als angeben 

set time_zone = '-6:00';
3
sikander

Es ist zu beachten, dass die Standardeinstellung der MySQL-Zeitzonenvariable SYSTEM beim Start von MySQL ist. Der SYSTEM-Wert wird aus der Umgebungsvariablen GLOBAL time_zone des Betriebssystems abgerufen.

Die Standard-Zeitzonenvariable von MySQL kann beim Start mit einem anderen Wert initialisiert werden, indem die folgende Befehlszeilenoption bereitgestellt wird:

--default-time-zone=timezone

Wenn Sie den Wert in einer Optionsdatei angeben, sollten Sie die folgende Syntax verwenden, um die Variable festzulegen:

--default-time-zone='timezone'

Wenn Sie ein Benutzer von MySQL SUPER sind, können Sie die SYSTEM time_zone-Variable zur Laufzeit über die Eingabeaufforderung MYSQL> mit der folgenden Syntax festlegen:

SET GLOBAL time_zone=timezone;

MySQL unterstützt auch individuelle SESSION-Zeitzonenwerte, die standardmäßig auf den Wert der Umgebungsvariablen GLOBAL time_zone eingestellt sind. Verwenden Sie die folgende Syntax, um den Sitzungszeitzonenwert während einer SESSION zu ändern:

SET time_zone=timezone;

Um die vorhandenen MYSQL-Zeitzoneneinstellungswerte abzufragen, können Sie die folgende SQL ausführen, um diese Werte zu erhalten:

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