Timezoner son MySQL server

Dans le cas d’un MySQL sous docker, le server MySQL n’est pas Timezoné correctement. Par exemple, quand on lance la requête suivante :

mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM             | SYSTEM              |
+--------------------+---------------------+
1 row in set (0.00 sec)

Ce qui signifie que c’est la Timezone du système qui est utilisé. Un

date +%Z
CEST

nous confirme que nous sommes bien sur Europe/Paris.

Pourtant quand on insère des dates en base via un champs Timestamp, on se retrouve avec un décalage de 2 heures soit une timezone UTC ?

L’explication dans le cas qui nous intéresse, c’est que la table de Timezone de MySQL est vide. De ce fait, elle ne comprend pas la timezone que le système lui fourni et passe par défaut en UTC. La solution pour être certain de sa Timezone est ce la setter correctement :

  • Dans un terminal:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql

qui va mettre à jour la table de zonage de MySQL

  • Dans MySQL:
SET GLOBAL time_zone = 'Europe/Paris';
SET time_zone = 'Europe/Paris';

Timezoner son MySQL server écrit à l'origine par Marthym pour J'ai acheté un PC neuf cassé ... le September 22, 2015.

Vus : 1642
Publié par Marthym : 55