MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

So richten Sie benannte Zeitzonen in MariaDB ein

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.