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
é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.
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;
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
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.
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;
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)
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'");
?>