web-dev-qa-db-fra.com

Changement de fuseau horaire MySQL?

Comment puis-je changer mon fuseau horaire qui est actuellement en UTC en GMT +1, quelle est la bonne ligne et dois-je simplement la saisir 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 est parti, donc je suis un peu perdu merci

43
Karem

émettre la commande:

SET time_zone = 'America/New_York';

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

Cette commande permet de définir le fuseau horaire 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 chaque commande SQL impliquant des dates. Si vos requêtes passent par une classe, c'est facile à implémenter.

35
Bryon Hibbetts

Comme le note Umar, le moyen le plus simple de le faire est, par exemple:

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

L'utilisation du fuseau horaire nommé est importante pour un fuseau horaire avec un réglage de l'heure avancée. Cependant, pour certaines versions de Linux, vous pouvez obtenir la réponse suivante:

# 1298 - Fuseau horaire inconnu ou incorrect

Si vous voyez cela, vous devrez peut-être exécuter une traduction de 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 (racine MySQL, pas Linux) et il chargera toutes les définitions de votre zoneinfo dans mysql. Vous pouvez ensuite revenir en arrière et exécuter votre 

mysql> SET GLOBAL time_zone = timezone;
39
Ben D

Bien que la réponse de Bryon soit utile, je voudrais simplement ajouter que son lien concerne les noms de fuseaux horaires PHP, qui ne sont pas identiques aux noms de fuseaux horaires MySQL. 

Si vous souhaitez définir votre fuseau horaire pour une session individuelle sur GMT + 1 (UTC + 1 pour être précis), utilisez simplement la chaîne '+01: 00' dans cette commande. C'est à dire.: 

SET time_zone = '+01:00';

Pour voir le fuseau horaire utilisé par votre session MySQL, exécutez ceci:

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

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

21
JJC

Voici comment synchroniser les fuseaux horaires PHP (> = 5.3) et MySQL par session et les paramètres utilisateur. Placez-le là où il fonctionne lorsque vous avez besoin de fuseaux horaires définis et synchronisés.

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 dans la liste des fuseaux horaires PHP: http://www.php.net/manual/en/timezones.php

Le fuseau horaire PHP doit être converti en décalage des heures et des minutes pour MySQL. C'est ce que font les lignes 1-4.

5
drolex

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 à l'aide de cette instruction:

mysql> SET GLOBAL time_zone = timezone;
4
Umar Adil

Si SET time_zone ou SET GLOBAL time_zone ne fonctionne pas, vous pouvez le modifier comme suit: 

  • Changer le système de fuseau horaire, exemple: ubuntu ... $ Sudo dpkg-reconfigure Tzdata

  • Redémarrez le serveur ou redémarrez Apache2 et mysql (/ Etc/init.d/mysql restart)

1
Arjun s

Cela fonctionne bien

<?php
      $con=mysqli_connect("localhost","my_user","my_password","my_db");
      $con->query("SET GLOBAL time_zone = 'Asia/Calcutta'");
      $con->query("SET time_zone = '+05:30'");
      $con->query("SET @@session.time_zone = '+05:30'");
?>
0
yaseen ahmed