Ich dachte, dies könnte nützlich sein:
Es gibt drei Stellen, an denen die Zeitzone in MySQL eingestellt werden kann:
In der Datei "my.cnf" im Abschnitt [mysqld]
default-time-zone='+00:00'
Variable @@global.time_zone
Um zu sehen, auf welchen Wert sie eingestellt sind:
SELECT @@global.time_zone;
Um einen Wert dafür festzulegen, verwenden Sie eine der beiden Möglichkeiten:
SET GLOBAL time_zone = '+8:00';
SET GLOBAL time_zone = 'Europe/Helsinki';
SET @@global.time_zone = '+00:00';
(Die Verwendung von benannten Zeitzonen wie "Europa/Helsinki" bedeutet, dass Sie eine ordnungsgemäß ausgefüllte Zeitzonentabelle haben müssen).
Bitte beachten Sie, dass +02:00
ist ein Offset. Europe/Berlin
eine Zeitzone ist (die zwei Offsets hat) und CEST
ist eine Uhrzeit, die einem bestimmten Offset entspricht.
Variable @@session.time_zone
SELECT @@session.time_zone;
Zum Einstellen verwenden Sie eine der beiden Optionen:
SET time_zone = 'Europe/Helsinki';
SET time_zone = "+00:00";
SET @@session.time_zone = "+00:00";
Beide können SYSTEM zurückgeben, was bedeutet, dass sie die in my.cnf eingestellte Zeitzone verwenden.
Damit die Zeitzonennamen funktionieren, müssen Sie Ihre Zeitzonen-Informationstabellen einrichten und ausfüllen: http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html . Ich erwähne auch, wie man diese Tabellen auffüllt in diese Antwort .
So erhalten Sie die aktuelle Zeitzonenverschiebung als TIME
SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);
Es wird 02:00:00 zurückgegeben, wenn Ihre Zeitzone +2:00 ist.
Um den aktuellen UNIX-Zeitstempel zu erhalten:
SELECT UNIX_TIMESTAMP();
SELECT UNIX_TIMESTAMP(NOW());
So erhalten Sie die Spalte timestamp als UNIX-Zeitstempel
SELECT UNIX_TIMESTAMP(`timestamp`) FROM `table_name`
So erhalten Sie eine UTC-Datumszeitspalte als UNIX-Zeitstempel
SELECT UNIX_TIMESTAMP(CONVERT_TZ(`utc_datetime`, '+00:00', @@session.time_zone)) FROM `table_name`
Hinweis: Ändern der Zeitzone ändert nicht die gespeicherte Uhrzeit oder den Zeitstempel aber es wird eine andere Datumszeit für bestehende Zeitstempelspalten anzeigen, da sie intern als UTC-Zeitstempel gespeichert und extern in der aktuellen MySQL-Zeitzone angezeigt werden.
Ich habe hier einen Spickzettel erstellt: Sollte die Zeitzone von MySQL auf UTC eingestellt sein?