Wenn Sie benannte Zeitzonen in MariaDB verwenden möchten, müssen Sie sicherstellen, dass sie konfiguriert wurden.
Mit „benannten Zeitzonen“ meine ich die Möglichkeit, Zeichenfolgen wie America/Los_Angeles
zu verwenden statt −08:00
oder −07:00
bei der Angabe der Zeitzone. Zum Beispiel bei Verwendung von CONVERT_TZ()
Funktion.
So konfigurieren Sie benannte Zeitzonen in MariaDB.
Zeitzonentabellen
MariaDB hat die folgenden Zeitzonentabellen in mysql
Datenbank:
time_zone
time_zone_leap_second
time_zone_name
time_zone_transition
time_zone_transition_type
Standardmäßig werden diese Tabellen erstellt, aber nicht ausgefüllt.
Um benannte Zeitzonen zu verwenden, müssen Sie diese Tabellen füllen. Die Methode dafür hängt von Ihrem System ab (d. h. ob Ihr System tatsächlich Zeitzoneninformationen enthält oder nicht).
Unix-ähnliche Systeme
Der Grund, warum die obigen Zeitzonentabellen standardmäßig leer sind, liegt darin, dass es normalerweise besser ist, wenn das System die Zeitzone handhabt, wenn möglich.
Die meisten Unix-ähnlichen Systeme wie Linux, Mac OS X, FreeBSD und Solaris haben eine zoneinfo-Datenbank. Diese zoneinfo-Datenbank kann mit dem mysql_tzinfo_to_sql
in die Zeitzonentabellen in MariaDB geladen werden Dienstprogramm.
Wenn Ihr System eine zoneinfo-Datenbank enthält, ist es vorzuziehen, dass Sie diese Methode verwenden, um die Zeitzonentabellen zu füllen. Andernfalls können Sie einen Unterschied in der Behandlung von Datum und Uhrzeit zwischen MariaDB und anderen Anwendungen auf Ihrem System verursachen.
Öffnen Sie zum Laden der Zeitzonentabellen ein Terminalfenster und führen Sie Folgendes aus:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Geben Sie das Passwort für den root
ein Benutzer. Wenn Sie einen „Zugriff verweigert“-Fehler erhalten, sehen Sie sich diesen Fix an.
Das ist es. Die Zeitzonentabellen sollten jetzt ausgefüllt sein.
In meinem Fall habe ich eine Warnung erhalten:
Warning: Unable to load '/usr/share/zoneinfo/leapseconds' as time zone. Skipping it.
Diese Warnung kann getrost ignoriert werden.
Diese Warnung ist wahrscheinlich darauf zurückzuführen, dass Unix-ähnliche Systeme keine Schaltsekunden enthalten. Das heißt, Unix-ähnliche Systeme haben keine Möglichkeit, die Schaltsekunde in Form von 23:59:60
darzustellen . Stattdessen wird dieselbe Sekunde nur zweimal verwendet.
Dies entspricht dem POSIX-Standard (Portable Operating System Interface), der erfordert, dass Schaltsekunden aus der gemeldeten Zeit weggelassen werden.
Windows, HP-UX-Systeme
Einige Systeme wie Windows und HP-UX haben keine zoneinfo-Datenbank, daher müssen Sie die Zeitzonentabellen per SQL-Skript laden, wenn Sie diese Betriebssysteme verwenden.
Siehe die MySQL-Dokumentation für die Skripte und Installationsanweisungen.
Überprüfen Sie die Zeitzonentabellen
Nachdem die Zeitzonentabellen ausgefüllt wurden, können wir eine schnelle Abfrage ausführen, um zu überprüfen, ob sie tatsächlich ausgefüllt sind.
Beispiel:
SELECT *
FROM mysql.time_zone_name
LIMIT 10;
Ergebnis:
+--------------------+--------------+ | Name | Time_zone_id | +--------------------+--------------+ | Africa/Abidjan | 1 | | Africa/Accra | 2 | | Africa/Addis_Ababa | 3 | | Africa/Algiers | 4 | | Africa/Asmara | 5 | | Africa/Asmera | 6 | | Africa/Bamako | 7 | | Africa/Bangui | 8 | | Africa/Banjul | 9 | | Africa/Bissau | 10 | +--------------------+--------------+
In diesem Fall habe ich die Top-10-Ergebnisse aus time_zone_name
ausgewählt Tisch.
Hier ist die vollständige Zählung:
SELECT COUNT(*)
FROM mysql.time_zone_name;
Ergebnis:
+----------+ | COUNT(*) | +----------+ | 594 | +----------+
Die anderen Tabellen können Sie nach Bedarf durchlaufen.