Marthym bio photo

Marthym

Frédéric, un Nième développeur qui partage ses aventures ...

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';