Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment définir le fuseau horaire de MySQL ?

J'ai pensé que cela pourrait être utile :

Il existe trois endroits où le fuseau horaire peut être défini dans MySQL :

Dans le fichier "my.cnf" dans la section [mysqld]

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

Variable @@global.time_zone

Pour voir à quelle valeur ils sont définis :

SELECT @@global.time_zone;

Pour lui attribuer une valeur, utilisez l'une des deux :

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

(L'utilisation de fuseaux horaires nommés comme "Europe/Helsinki" signifie que vous devez avoir une table de fuseaux horaires correctement remplie.)

Gardez à l'esprit que +02:00 est un décalage. Europe/Berlin est un fuseau horaire (qui a deux décalages) et CEST est une heure d'horloge qui correspond à un décalage spécifique.

Variable @@session.time_zone

SELECT @@session.time_zone;

Pour le définir, utilisez l'un ou l'autre :

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

Les deux peuvent renvoyer SYSTEM, ce qui signifie qu'ils utilisent le fuseau horaire défini dans my.cnf.

Pour que les noms de fuseau horaire fonctionnent, vous devez configurer vos tables d'informations de fuseau horaire pour qu'elles soient remplies :http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html . Je mentionne également comment remplir ces tables dans cette réponse .

Pour obtenir le décalage horaire actuel en tant que TIME

SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);

Il renverra 02:00:00 si votre fuseau horaire est +2:00.

Pour obtenir l'horodatage UNIX actuel :

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

Pour obtenir la colonne d'horodatage en tant qu'horodatage UNIX

SELECT UNIX_TIMESTAMP(`timestamp`) FROM `table_name`

Pour obtenir une colonne date/heure UTC en tant qu'horodatage UNIX

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

Remarque :La modification du fuseau horaire ne modifiera pas la date/heure ou l'horodatage enregistré , mais il affichera une date/heure différente pour les colonnes d'horodatage existantes car elles sont stockées en interne sous forme d'horodatages UTC et affichées en externe dans le fuseau horaire MySQL actuel.

J'ai fait une feuille de triche ici :MySQL devrait-il avoir son fuseau horaire réglé sur UTC ?