convert_tz renvoie null


92

Je sais que cela semble stupide, mais quand j'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 (également en utilisant MySQL Workbench).

Réponses:


174

Cela se produira si vous n'avez pas chargé la table des fuseaux horaires dans mysql.

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

1
Avez-vous juste besoin de le faire une fois, ou à chaque fois que MySql démarre?
Abe Miessler

3
Juste une fois. Il charge les informations dans une table dans MySQL, qui est ensuite utilisée.
Barmar

2
Vous pouvez également utiliser l'indicateur de force pour remplacer les erreurs que vous rencontrez: mysql_tzinfo_to_sql / usr / share / zoneinfo | mysql -u root --force -p mysql
scum

3
J'avais également besoin de redémarrer le démon MySQL avant qu'il n'entre en vigueur (sur Debian).
Ekster

2
Salut, lorsque j'exécute cette commande, j'ai une erreur comme celle-ci: Avertissement: Impossible de charger «/usr/share/zoneinfo/iso3166.tab» comme fuseau horaire. Sauter. Avertissement: impossible de charger «/usr/share/zoneinfo/zone.tab» comme fuseau horaire. Sauter.
Ghanshyam Katriya

26

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 la même sur le site de développement de MySQL), la commande n'a pas pu convertir entre les fuseaux horaires tels que

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','MET') AS time

Il s'avère que sur OS X, deux fichiers posent des problèmes: /usr/share/zoneinfo/Factoryet /usr/share/zoneinfo/+VERSION.

Le correctif ... déplacer temporairement ces fichiers vers un emplacement différent tel que /usr/share/zoneinfo/.bak/permet la commande

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

pour renseigner entièrement toutes les informations de fuseau horaire attendues.

Cela peut ou non ê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

J'opère également en STRICT_MODE.

Dans tous les cas, j'espère que cela évitera quelques maux de tête à quiconque recherche le correctif.


13

En dehors de l'environnement Windows, vous pouvez définir le fuseau horaire en

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 (c.-à-d. C: \ Program Files \ MySQL \ data \ mysql) `

4. Start MySQL server

.. Votre travail est terminé.

Si encore vous obtenez NULLpour CONVERT_TZ télécharger ces tables de base de données et l' insérer dans la base de données MySQL http://www.4shared.com/folder/Toba2qu-/Mysql_timezone.html

Maintenant, votre problème sera résolu .. :)



2

MAMP PRO

  1. Ouvert Terminal
  2. cd /usr/share/zoneinfo/
  3. sudo mv +VERSION ~/Desktop
  4. cd /applications/MAMP/Library/bin
  5. sudo ./mysql_tzinfo_to_sql /usr/share/zoneinfo | ./mysql -p -u root mysql
  6. sudo mv ~/Desktop/+VERSION /usr/share/zoneinfo/

Autre que l'emplacement du dossier binaire, cela s'applique à macOS en général. Merci!
colonelclick

2

1) Sous Windows, il n'y a aucun dossier de données maintenant 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 le verrez pas C:\ProgramData\parfois.

3) Modifiez les paramètres dans l'onglet Affichage pour voir 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) Ensuite, décompressez le timezone_2017c_posix.zip, puis copiez-y les fichiers (copiez les fichiers directement, ne copiez pas tout le dossier lui-même), et collez-le C:\ProgramData\MySQL\MySQLServer5.x\Data\mysql\

6) Pour MySQL 5.7, timezone_2017c_posix.zip donnera juste un fichier .sql après la décompression et cela ne résoudra pas le problème. Alors allez-y et téléchargez le fichier zip pour 5.6 même si vous exécutez MySQL 5.7 et copiez ces fichiers dansC:\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.


1
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 permettre à mysql d'insérer des données tronquées c'était à cause d'un bogue mysql où mysql ajouterait un caractère nul à la fin (selon le lien ci-dessus)

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

J'ai OSX El Capitan et c'est la seule réponse pour le faire fonctionner. Pour référence future: dans mon cas, l'erreur indique: "Données trop longues pour la colonne 'Abréviation' à la ligne 1". Remarque: tous les efforts pour faire (sudo) mkdir ou (sudo) mv des fichiers mentionnés dans d'autres réponses aboutissent à une `` autorisation refusée ''
hepabolu

BTW je n'ai pas besoin de redémarrer MySQL.
hepabolu

1

Voici les étapes à suivre pour que cela fonctionne si vous êtes sous Windows et que vous utilisez MySQL 5.7.

  1. Faites un clic droit sur Poste de travail / Ordinateur / Ce PC ou quel que soit le nom de votre système d'exploitation et choisissez Propriétés.
  2. Choisissez "Paramètres système avancés" dans le panneau de gauche.
  3. Choisissez "Variables d'environnement", entrez le chemin d'accès complet de votre répertoire bin MySQL (généralement, il sera dans, C: \ Program Files \ MySQL \ MySQL Server 5.7 \ bin).
  4. Ouvrez l'invite cmd, entrez dans mysql en utilisant mysql -u root -p password.
  5. Entrez use mysqlpour sélectionner la base de données MySQL.
  6. Téléchargez le fichier "timezone_YYYYc_posix_sql.zip" (à la place de YYYY, remplacez l'année maximum disponible dans cette page comme 2017 ou 2018) à partir de https://dev.mysql.com/downloads/timezones.html .
  7. Extrayez-le et ouvrez le fichier dans l'éditeur de texte.
  8. Copiez le contenu et exécutez-le dans l'invite cmd.

En cas de réussite, vous devriez pouvoir utiliser CONVERT_TZet d'autres fonctions de fuseau horaire.


0

Sur Mac OS Catalina lors de l'utilisation de XAMPP,

Accédez au dossier / Applications / XAMPP / xamppfiles / bin dans Terminal puis exécutez ce qui suit.

./mysql_tzinfo_to_sql / usr / share / zoneinfo | sed -e "s / Le fuseau horaire local doit être défini - voir la page de manuel zic / local /" | ./mysql -u racine mysql

Cela a fonctionné pour moi.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.