Je sais que cela semble stupide, mais quand je l'utilise
SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta') AS time
il sort NULL. J'utilise MySQL Workbench dans Ubuntu 12.04 64 bits et cela fonctionne dans mon autre ordinateur portable/OS (utilisant également MySQL Workbench).
Cela se produira si vous n'avez pas chargé la table de fuseaux horaires dans mysql.
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
J'ai trouvé ce fil après avoir passé un certain temps à essayer de comprendre pourquoi, après avoir exécuté la commande dans la réponse acceptée (qui est identique sur le site de développement de MySQL), la commande n'a pas pu être convertie entre les fuseaux horaires tels que
SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','MET') AS time
Il se trouve que sur OS X, deux fichiers posent problème: /usr/share/zoneinfo/Factory
et /usr/share/zoneinfo/+VERSION
.
Le correctif ... déplaçant temporairement ces fichiers vers un emplacement différent, tel que /usr/share/zoneinfo/.bak/
, autorise la commande
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
pour remplir complètement toutes les informations de fuseau horaire attendues.
Cela peut ou peut ne pas être un bogue dans ma version installée de MySQL:
$ mysql --version
mysql Ver 14.14 Distrib 5.6.11, for osx10.6 (x86_64) using EditLine wrapper
Je travaille également dans STRICT_MODE
.
En tout cas, j'espère que cela épargnera quelques maux de tête à quiconque cherche le correctif.
En dehors de l’environnement Windows, vous pouvez définir le fuseau horaire par
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Dans l'environnement Windows,
1. download Time zone description tables from
http://dev.mysql.com/downloads/timezones.html
2. Stop MySQL server
3. Put then inside Mysql installation package
(ie. C:\Program Files\MySQL\data\mysql) `
4. Start MySQL server
..Votre travail est terminé ..
Si vous obtenez toujours NULL
pour CONVERT_TZ
Téléchargez ces tables de base de données et insérez-les dans la base de données mysql http://www.4shared.com/folder/Toba2qu-/Mysql_timezone.html
Maintenant, votre problème sera résolu .. :)
Si vous utilisez MySql sous Windows, vous devez charger les données du fuseau horaire dans le schéma mysql. Voici un bon HOWTO: http://www.geeksengine.com/article/populate-time-zone-data-for-mysql.html
Si vous ne le faites pas, la fonction CONVERT_TZ ne reconnaîtra pas le fuseau horaire de votre entrée (c'est-à-dire vos exemples: 'UTC', 'Asia/Jakarta') et retournera simplement NULL.
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
si vous obtenez l'erreur data too long for column 'abbreviation' at row 1
.__, consultez: https://bugs.mysql.com/bug.php?id=68861
le correctif serait d'exécuter ce qui suit
cela ajoutera une ligne pour désactiver le mode mysql et autoriser mysql à insérer des données tronquées.
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
(if the above gives error "data too long for column 'abbreviation' at row 1")
mysql_tzinfo_to_sql /usr/share/zoneinfo > /tmp/zut.sql
echo "SET SESSION SQL_MODE = '';" > /tmp/mysql_tzinfo_to.sql
cat /tmp/zut.sql >> /tmp/mysql_tzinfo_to.sql
mysql --defaults-file=/etc/mysql/my.cnf --user=verifiedscratch -p mysql < /tmp/mysql_tzinfo_to.sql
Voici les étapes à suivre pour que cela fonctionne si vous utilisez Windows et que vous utilisez MySQL 5.7.
mysql -u root -p password
.use mysql
pour sélectionner la base de données MySQL.En cas de réussite, vous devriez pouvoir utiliser CONVERT_TZ
et d’autres fonctions de fuseau horaire.
1) Sous Windows, il n’ya pas de dossier de données dans C:\Program Files\MySQL\
comme dans les autres réponses.
2) Dans ce cas, recherchez C:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql
. Généralement ce dossier est caché et vous ne verrez pas C:\ProgramData\
quelques fois.
3) Modifiez les paramètres dans l'onglet Affichage pour afficher les fichiers et dossiers cachés comme expliqué ici https://irch.info/index.php?pg=kb.page&id=133
4) Arrêtez le service MySQL en recherchant "services" dans le bouton Démarrer de Windows.
5) Décompressez ensuite timezone_2017c_posix.Zip, puis copiez-y les fichiers (copiez-les directement, ne copiez pas le dossier en entier) et collez-les C:\ProgramData\MySQL\MySQLServer5.x\Data\mysql\
6) Pour MySQL 5.7, timezone_2017c_posix.Zip donnera simplement un fichier .sql après avoir décompressé le fichier et ne risque pas de résoudre le problème. Alors allez-y et téléchargez le fichier Zip pour 5.6 même si vous utilisez MySQL 5.7 et copiez ces fichiers dans C:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql\
7) Redémarrez le serveur MySQL. Pour vérifier si CONVERT_TZ () fonctionne, exécutez cette requête SQL.
SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta');
et vérifiez la sortie non nulle.
MAMP PRO
Terminal
cd /usr/share/zoneinfo/
Sudo mv +VERSION ~/Desktop
cd /applications/MAMP/Library/bin
Sudo ./mysql_tzinfo_to_sql /usr/share/zoneinfo | ./mysql -p -u root mysql
Sudo mv ~/Desktop/+VERSION /usr/share/zoneinfo/