it-swarm.com.de

convert_tz gibt null zurück

Ich weiß, das hört sich dumm an, aber wenn ich es benutze

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta') AS time

es gibt NULL aus. Ich verwende MySQL Workbench in Ubuntu 12.04 64 Bit, und es funktioniert in meinen anderen Laptops/Betriebssystemen (auch mit MySQL Workbench).

78
mohur

Dies passiert, wenn Sie die Zeitzonentabelle nicht in mysql geladen haben.

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

Ich fand diesen Thread, nachdem ich einige Zeit damit verbracht hatte herauszufinden, warum der Befehl nach Ausführung des Befehls in der akzeptierten Antwort (die auf MySQL-Dev-Site derselbe ist) nicht in der Lage ist, zwischen Zeitzonen wie z

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

Es stellt sich heraus, dass es unter OS X zwei Dateien gibt, die Probleme verursachen: /usr/share/zoneinfo/Factory und /usr/share/zoneinfo/+VERSION

Das Update ... das temporäre Verschieben dieser Dateien an einen anderen Speicherort wie /usr/share/zoneinfo/.bak/ ermöglicht den Befehl

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

alle erwarteten Zeitzoneninformationen vollständig ausfüllen.

Dies kann ein Fehler in meiner installierten MySQL-Version sein oder nicht:

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.11, for osx10.6 (x86_64) using  EditLine wrapper

Ich arbeite auch in STRICT_MODE.

In jedem Fall hoffe ich, dass dies jedem, der nach dem Fix sucht, einige Kopfschmerzen erspart.

24
Jim Schubert

Neben der Windows-Umgebung können Sie die Zeitzone nach einstellen 

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

In der Umgebung Windows

1. download Time zone description tables fromhttp://dev.mysql.com/downloads/timezones.html

2. Stop MySQL server

3. Put then inside Mysql installation package (dh C:\Programme\MySQL\data\mysql) `

4. Start MySQL server

..Ihre Arbeit ist beendet ..

Wenn Sie immer noch NULL für CONVERT_TZ.__ erhalten. Laden Sie diese Datenbanktabellen herunter und fügen Sie sie in die MySQL-Datenbank http://www.4shared.com/folder/Toba2qu-/Mysql_timezone.html ein.

Jetzt wird dein Problem gelöst .. :)

13
Rakesh

Wenn Sie MySql unter Windows verwenden, müssen Sie die Zeitzonendaten in das Mysql-Schema laden. Hier ist ein gutes HOWTO: http://www.geeksengine.com/article/populate-time-zone-data-for-mysql.html

Wenn Sie dies nicht tun, erkennt die Funktion CONVERT_TZ Ihre Eingabe-Zeitzone (d. H. Ihre Beispiele: 'UTC', 'Asia/Jakarta') nicht und gibt einfach NULL zurück.

2
Domenic D.
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

wenn Sie den Fehler data too long for column 'abbreviation' at row 1.__ erhalten, lesen Sie: https://bugs.mysql.com/bug.php?id=68861

die Lösung wäre, das Folgende auszuführen

dies fügt eine Zeile hinzu, um den Mysql-Modus zu deaktivieren und Mysql kann abgeschnittene Daten einfügen. Dies war auf einen Mysql-Fehler zurückzuführen, bei dem Mysql am Ende ein Nullzeichen hinzufügte (entsprechend dem obigen Link)

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
1
Timo Huovinen

Dies sind die Schritte, damit es funktioniert, wenn Sie sich unter Windows befinden und MySQL 5.7 verwenden.

  1. Klicken Sie mit der rechten Maustaste auf Arbeitsplatz/Computer/Dieser PC oder wie auch immer der Name in Ihrem Betriebssystem lautet, und wählen Sie Eigenschaften.
  2. Wählen Sie im linken Bereich "Erweiterte Systemeinstellungen".
  3. Wählen Sie "Umgebungsvariablen" und geben Sie den vollständigen Pfadnamen Ihres MySQL-Bin-Verzeichnisses ein (im Allgemeinen C:\Programme\MySQL\MySQL Server 5.7\bin).
  4. Cmd-Eingabeaufforderung öffnen, mit mysql -u root -p password in mysql eingeben.
  5. Geben Sie use mysql ein, um die MySQL-Datenbank auszuwählen.
  6. Laden Sie die Datei "timezone_YYYYc_posix_sql.Zip" herunter (ersetzen Sie anstelle von YYYY das auf dieser Seite maximal mögliche Jahr wie 2017 oder 2018) von https://dev.mysql.com/downloads/timezones.html .
  7. Extrahieren Sie es und öffnen Sie die Datei im Texteditor.
  8. Kopieren Sie den Inhalt und führen Sie ihn in der Eingabeaufforderung aus.

Nach erfolgreichem Abschluss sollten Sie CONVERT_TZ und andere Zeitzonenfunktionen verwenden können.

1
Stranger

1) In Windows gibt es keinen Datenordner mehr in C:\Program Files\MySQL\ Wie in anderen Antworten.

2) Suchen Sie in diesem Fall nach C:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql. Im Allgemeinen ist dieser Ordner versteckt und Sie werden manchmal nicht C:\ProgramData\ Sehen.

3) Ändern Sie die Einstellungen in der Registerkarte Ansicht, um versteckte Dateien und Ordner anzuzeigen, wie hier erläutert https://irch.info/index.php?pg=kb.page&id=1

4) Beenden Sie den MySQL-Dienst, indem Sie in der Windows-Startschaltfläche nach "services" suchen.

5) Entpacken Sie dann die Datei timezone_2017c_posix.Zip und kopieren Sie die darin enthaltenen Dateien (kopieren Sie die Dateien direkt, kopieren Sie nicht den gesamten Ordner selbst) und fügen Sie C:\ProgramData\MySQL\MySQLServer5.x\Data\mysql\ Ein.

6) Für MySQL 5.7 gibt timezone_2017c_posix.Zip nach dem Entpacken nur eine .sql-Datei aus und kann das Problem möglicherweise nicht lösen. Laden Sie also die Zip-Datei für 5.6 herunter, auch wenn Sie MySQL 5.7 ausführen, und kopieren Sie diese Dateien nach C:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql\.

7) Starten Sie den MySQL-Server neu. Führen Sie diese SQL-Abfrage aus, um zu überprüfen, ob CONVERT_TZ () funktioniert.

SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta'); und überprüfe, ob die Ausgabe nicht null ist.

1
shanu

MAMP PRO

  1. Terminal öffnen
  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/
0
Jaseem Abbas