Auf meinem Web-Hosting verwende ich für Datenbanken den MySQL-Server des Hosters. Auf meinem lokalen PC läuft hingegen MariaDB. Meine Webanwendungen teste ich lokal mit MariaDB und auf dem Server laufen sie mit MySQL. Bisher hat das immer problemlos funktioniert. Jetzt wollte ich einen Zeitstempel von einer Zeitzone in eine andere konvertieren und habe dabei festgestellt, dass die dafür in der MySQL-Dokumentation empfohlene Lösung in MariaDB nicht funktioniert.
Auf Server Time Zone Support gibt es ein Beispiel für die Konvertierung eines Zeitstempels von der lokalen Zeitzone nach UTC:
mysql> SELECT col,
> CAST(col AT TIME ZONE INTERVAL '+00:00' AS DATETIME) AS ut
> FROM ts ORDER BY id;
Das funktioniert zwar mit dem MySQL-Server, MariaDB meldet aber bei AT TIME ZONE INTERVAL
einen Syntaxfehler.
Eine Lösung, die mit beiden Servern funktioniert, verwendet die Funktion CONVERT_TZ. Kennt man die Zeitzone des zu konvertierenden Zeitstempels nicht, muss man diese zuvor noch ermitteln. Bei Werten von TIMESTAMP-Spalten aus der Datenbank haben normalerweise die Zeitzone des lokalen Rechners. Diese erhält man mit:
SELECT @@GLOBAL.time_zone, @@SESSION.time_zone
@@GLOBAL.time_zone | @@SESSION.time_zone
--------------------+--------------------
SYSTEM | SYSTEM
Nach UTC konvertiert man dann so:
SELECT CONVERT_TZ(col_timestamp, 'SYSTEM', '+00:00) AS timestamp_utc FROM my_table