436 Stimmen

Wie kann ich die Zeitzone von MySQL einstellen?

Auf einem Server, wenn ich ausführe:

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2009-05-30 16:54:29 |
+---------------------+
1 row in set (0.00 sec)

Auf einem anderen Server:

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2009-05-30 20:01:43 |
+---------------------+
1 row in set (0.00 sec)

662voto

Timo Huovinen Punkte 49275

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?

114voto

Noel Murphy Punkte 1188

Für alle, die dieses Problem immer noch haben:

value="jdbc:mysql://localhost:3306/dbname?serverTimezone=UTC"

Hat bei mir funktioniert. Einfach anhängen ?serverTimezone=UTC am Ende.

75voto

jane Punkte 671

Wenn Sie den Zeitzonen-Server für MySQL oder PHP konfigurieren können:

Erinnern Sie sich:

  1. Zeitzonensystem ändern. Beispiel für Ubuntu:

    $ sudo dpkg-reconfigure tzdata
  2. Starten Sie den Server neu, oder Sie können Apache 2 und MySQL neu starten:

    /etc/init.d/mysql restart

65voto

James Skidmore Punkte 46884

Um sie für die aktuelle Sitzung einzustellen, gehen Sie wie folgt vor:

SET time_zone = timezonename;

58voto

Rico Chan Punkte 1866

Führen Sie dies einfach auf Ihrem MySQL-Server aus:

SET GLOBAL time_zone = '+8:00';

Wobei +8:00 Ihre Zeitzone sein wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X