Mysql
 sql >> Database >  >> RDS >> Mysql

Come faccio a impostare il fuso orario di MySQL?

Ho pensato che potesse essere utile:

Ci sono tre punti in cui il fuso orario potrebbe essere impostato in MySQL:

Nel file "my.cnf" nella sezione [mysqld]

default-time-zone='+00:00'

@@global.time_zone variabile

Per vedere a quale valore sono impostati:

SELECT @@global.time_zone;

Per impostare un valore usa uno dei due:

SET GLOBAL time_zone = '+8:00';
SET GLOBAL time_zone = 'Europe/Helsinki';
SET @@global.time_zone = '+00:00';

(L'uso di fusi orari con nome come "Europa/Helsinki" significa che devi avere una tabella di fusi orari correttamente popolata.)

Tieni presente che +02:00 è un offset. Europe/Berlin è un fuso orario (che ha due offset) e CEST è un orario che corrisponde a un offset specifico.

@@session.time_zone variabile

SELECT @@session.time_zone;

Per impostarlo usa uno dei due:

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

Entrambi potrebbero restituire SYSTEM, il che significa che utilizzano il fuso orario impostato in my.cnf.

Affinché i nomi dei fusi orari funzionino, è necessario configurare le tabelle delle informazioni sul fuso orario che devono essere compilate:http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html . Cito anche come popolare quelle tabelle in questa risposta .

Per ottenere l'offset del fuso orario corrente come TIME

SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);

Restituirà 02:00:00 se il tuo fuso orario è +2:00.

Per ottenere il timestamp UNIX corrente:

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

Per ottenere la colonna timestamp come timestamp UNIX

SELECT UNIX_TIMESTAMP(`timestamp`) FROM `table_name`

Per ottenere una colonna data/ora UTC come timestamp UNIX

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

Nota:la modifica del fuso orario non modificherà la data e l'ora o il timestamp memorizzati , ma mostrerà una data e ora diversa per le colonne timestamp esistenti poiché sono archiviate internamente come timestamp UTC e visualizzate esternamente nel fuso orario MySQL corrente.

Ho creato un cheatsheet qui: MySQL dovrebbe avere il fuso orario impostato su UTC?