Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie stelle ich die Zeitzone von MySQL ein?

Ich dachte, das 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'

@@global.time_zone-Variable

Um zu sehen, auf welchen Wert sie gesetzt sind:

SELECT @@global.time_zone;

Um einen Wert dafür festzulegen, verwenden Sie entweder:

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 Zeitzonentabelle richtig ausgefüllt haben müssen.)

Denken Sie daran, dass +02:00 ist ein Versatz. Europe/Berlin ist eine Zeitzone (die zwei Offsets hat) und CEST ist eine Uhrzeit, die einem bestimmten Offset entspricht.

@@session.time_zone-Variable

SELECT @@session.time_zone;

Um es einzustellen, verwenden Sie entweder:

SET time_zone = 'Europe/Helsinki';
SET time_zone = "+00:00";
SET @@session.time_zone = "+00:00";

Beide geben möglicherweise SYSTEM zurück, was bedeutet, dass sie die in my.cnf festgelegte Zeitzone verwenden.

Damit Zeitzonennamen funktionieren, müssen Sie Ihre Zeitzoneninformationstabellen auffüllen:http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html . Ich erwähne auch, wie diese Tabellen in dieser Antwort gefüllt werden .

Um den aktuellen Zeitzonenoffset als TIME zu erhalten

SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);

Es wird 02:00:00 zurückgegeben, wenn Ihre Zeitzone +2:00 ist.

So erhalten Sie den aktuellen UNIX-Zeitstempel:

SELECT UNIX_TIMESTAMP();
SELECT UNIX_TIMESTAMP(NOW());

So erhalten Sie die Zeitstempelspalte als UNIX-Zeitstempel

SELECT UNIX_TIMESTAMP(`timestamp`) FROM `table_name`

So erhalten Sie eine UTC-Datetime-Spalte als UNIX-Zeitstempel

SELECT UNIX_TIMESTAMP(CONVERT_TZ(`utc_datetime`, '+00:00', @@session.time_zone)) FROM `table_name`

Hinweis:Das Ändern der Zeitzone ändert nicht die gespeicherte Datumszeit oder den Zeitstempel , aber es wird eine andere Datumszeit für vorhandene Zeitstempelspalten angezeigt, da sie intern als UTC-Zeitstempel gespeichert und extern in der aktuellen MySQL-Zeitzone angezeigt werden.

Ich habe hier einen Cheatsheet erstellt:Sollte die Zeitzone von MySQL auf UTC eingestellt sein?