46 votes

Changement de fuseau horaire MySQL ?

Comment puis-je changer mon fuseau horaire qui est actuellement en UTC en GMT +1, quelle est la ligne correcte et dois-je simplement l'entrer dans l'exécution SQL de phpMyAdmin ?

Mon hôte vient de me donner ce lien http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html et s'est éteint, donc je suis un peu perdue, merci.

42voto

Ben D Points 7458

La manière la plus simple de le faire, comme l'a noté Umar, est, par exemple, la suivante

mysql> SET GLOBAL time_zone = 'America/New_York';

L'utilisation du fuseau horaire nommé est importante pour les fuseaux horaires qui ont un ajustement de l'heure d'été. Cependant, pour certaines constructions linux, vous pouvez obtenir la réponse suivante :

1298 - Fuseau horaire inconnu ou incorrect

Si vous voyez cela, il se peut que vous ayez besoin d'exécuter une traduction tzinfo_to_sql... c'est facile à faire, mais pas évident. Depuis la ligne de commande linux, tapez :

mysql_tzinfo_to_sql /usr/share/zoneinfo/|mysql -u root mysql -p

Fournissez votre mot de passe Root (Root MySQL, pas Root Linux) et il chargera toutes les définitions dans votre zoneinfo dans mysql. Vous pouvez ensuite revenir en arrière et exécuter votre

mysql> SET GLOBAL time_zone = timezone;

41voto

Bryon Hibbetts Points 186

Donnez la commande :

SET time_zone = 'America/New_York';

(Ou quel que soit le fuseau horaire GMT+1..) http://www.php.net/manual/en/timezones.php )

Cette commande permet de définir le fuseau horaire de MySQL pour un client individuel, en supposant que vos clients sont répartis sur plusieurs fuseaux horaires.

Cette commande doit être exécutée avant toute commande SQL impliquant des dates. Si vos requêtes passent par une classe, alors ceci est facile à mettre en œuvre.

22voto

JJC Points 1505

Bien que la réponse de Bryon soit utile, j'ajouterais simplement que son lien concerne les noms de fuseaux horaires PHP, qui ne sont pas les mêmes que ceux de MySQL.

Si vous souhaitez régler le fuseau horaire d'une session individuelle sur GMT+1 (UTC+1 pour être précis), utilisez simplement la chaîne "+01:00" dans cette commande. Par exemple :

SET time_zone = '+01:00';

Pour voir quel fuseau horaire votre session MySQL utilise, il suffit d'exécuter ceci :

SELECT @@global.time_zone, @@session.time_zone;

Il s'agit d'une excellente référence avec plus de détails : Référence MySQL 5.5 sur les fuseaux horaires

6voto

drolex Points 874

Voici comment synchroniser les fuseaux horaires de PHP (>=5.3) et de MySQL par session et par utilisateur. Placez cette fonction là où elle s'exécute lorsque vous avez besoin de définir et de synchroniser les fuseaux horaires.

date_default_timezone_set($my_timezone);
$n = new \DateTime();
$h = $n->getOffset()/3600;
$i = 60*($h-floor($h));
$offset = sprintf('%+d:%02d', $h, $i);
$this->db->query("SET time_zone='$offset'");

Où $my_timezone est un des fuseaux horaires de PHP : http://www.php.net/manual/en/timezones.php

Le fuseau horaire de PHP doit être converti en décalage d'heure et de minute pour MySQL. C'est ce que font les lignes 1 à 4.

1 votes

Ne pouvez-vous pas obtenir la même chose avec <?= date('P') ; ?>

4voto

Umar Points 804

Si vous disposez du privilège SUPER, vous pouvez définir la valeur du fuseau horaire du serveur global au moment de l'exécution avec cette instruction :

mysql> SET GLOBAL time_zone = timezone;

1 votes

Et que faire s'il n'y a pas de privilège superadmin ?

0 votes

Juste SET time_zone = timezone;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X