Zeitzonen für MySQL unter Debian einrichten
In den meisten Programmiersprachen gibt es Methoden bzw. Klassen um Zeiten von einer in eine andere Zeitzone umzurechnen. Auch MySQL bietet mit der Funktion CONVERT_TZ()
die Möglichkeit Zeiten in andere Zeitzonen zu konvertieren.
Von Haus aus geht das jedoch nur mit Offsets wie +02:00
für die Deutsche Sommerzeit. Es ist jedoch einfacher und sinnvoller mit Zeitzonen wie Europe/Berlin
zu arbeiten, da hierdurch Sommer- und Winterzeit korrekt verarbeitet werden.
Zum Verständnis: +02:00
ist ein Offset (offset). Europe/Berlin
ist eine Zeitzone (timezone) mit zwei Offsets (+02:00
in der Sommerzeit und +01:00
in der Winterzeit). CEST
(auch MESZ
) ist eine Zeitangabe im Datum das ein spezielles Offset wiederspiegelt.
MySQL Zeitzonen eintragen
Variante 1: Um nun MySQL Zeitzonen „beizubringen“ ist gar nicht viel nötig. Da Debian von Haus aus schon mit Zeitzonen arbeiten kann und die Zeitzonendaten zur Verfügung stehen, reicht es schon diesen Einzeiler auf der Konsole auszuführen:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
Bei dieser Variante hier braucht Ihr einen MySQL User, der in die mysql
Tabelle schreiben darf, wie der MySQL User root
.
Variante 2: Wenn man MySQL unter Debian via APT installiert hat, geht es sogar noch einfacher:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql --defaults-file=/etc/mysql/debian.cnf mysql
Bei dieser Variante nutzt Ihr die Standard Debian Zugangsdaten für Wartung. Der Befehl muss als root
User des Systems (nicht MySQL root) ausgeführt werden.
Ergebnis prüfen
Über die Konsole könnt Ihr nun diesen Befehl ausführen um zu testen ob alles geklappt hat:
echo "SELECT NOW(), CONVERT_TZ(NOW(),'Europe/Berlin','UTC');" | mysql --defaults-file=/etc/mysql/debian.cnf
Der erste Wert sollte nun mit der normalen Europe/Berlin
identisch sein und der zweite Wert enthält die gleiche Zeit, aber in der Zeitzone UTC
.
Schlussbemerkungen
Theoretisch ist die Einrichtung der Zeitzonen für MySQL keine einmalige Angelegenheit. Zeitzonen können sich ändern. Stellen wir uns doch einfach mal vor, dass die deutsche Sommerzeit doch irgendwann mal abgeschafft wird. In diesem Fall muss der oben stehende Einzeiler einfach erneut ausgeführt werden.