Antworten:
Dies geschieht, wenn Sie die Zeitzonentabelle nicht in MySQL geladen haben.
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Ich fand diesen Thread, nachdem ich einige Zeit damit verbracht hatte herauszufinden, warum der Befehl nach dem Ausführen des Befehls in der akzeptierten Antwort (die auf der Dev-Site von MySQL identisch ist) nicht zwischen Zeitzonen wie z
SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','MET') AS time
Es stellt sich heraus, dass unter OS X zwei Dateien Probleme verursachen: /usr/share/zoneinfo/Factory
und /usr/share/zoneinfo/+VERSION
.
Das Update ... verschiebt diese Dateien vorübergehend an einen anderen Speicherort, z. B. /usr/share/zoneinfo/.bak/
ermöglicht den Befehl
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
um alle erwarteten Zeitzoneninformationen vollständig auszufüllen.
Dies kann ein Fehler in meiner installierten Version von MySQL sein oder auch nicht:
$ mysql --version
mysql Ver 14.14 Distrib 5.6.11, for osx10.6 (x86_64) using EditLine wrapper
Ich bin auch in tätig STRICT_MODE
.
Auf jeden Fall hoffe ich, dass dies ein paar Kopfschmerzen für jeden erspart, der nach dem Fix sucht.
Abgesehen von der Windows-Umgebung können Sie die Zeitzone nach festlegen
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
In der Windows- Umgebung
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
(dh C: \ Programme \ MySQL \ data \ mysql) `
4. Start MySQL server
..Ihre Arbeit ist beendet ..
Wenn Sie immer noch NULL
zum CONVERT_TZ
Herunterladen dieser Datenbanktabellen und Einfügen in die MySQL-Datenbank http://www.4shared.com/folder/Toba2qu-/Mysql_timezone.html
Jetzt wird dein Problem gelöst .. :)
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 Eingabezeitzone nicht (dh Ihre Beispiele: 'UTC', 'Asia / Jakarta') und gibt einfach NULL zurück.
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/
1) In Windows befindet sich derzeit kein Datenordner 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 ausgeblendet und wird C:\ProgramData\
manchmal nicht angezeigt .
3) Ändern Sie die Registerkarte Einstellungen in Ansicht, um ausgeblendete Dateien und Ordner anzuzeigen, wie hier erläutert: https://irch.info/index.php?pg=kb.page&id=133
4) Beenden Sie den MySQL-Dienst, indem Sie auf der Windows-Schaltfläche Start nach "Dienste" 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 sie ein
C:\ProgramData\MySQL\MySQLServer5.x\Data\mysql\
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 nachC:\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 auf Nicht-Null-Ausgabe prüfen.
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Wenn Sie den Fehler erhalten, data too long for column 'abbreviation' at row 1
lesen Sie: https://bugs.mysql.com/bug.php?id=68861
Die Lösung wäre, Folgendes auszuführen
Dadurch wird eine Zeile hinzugefügt, um den MySQL-Modus zu deaktivieren und MySQL zu ermöglichen, abgeschnittene Daten einzufügen. Dies lag an einem MySQL-Fehler, bei dem MySQL am Ende ein Nullzeichen hinzufügte (gemäß 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
Dies sind die Schritte, damit es funktioniert, wenn Sie sich in Windows befinden und MySQL 5.7 verwenden.
mysql -u root -p password
.use mysql
, um die MySQL-Datenbank auszuwählen.Nach erfolgreichem Abschluss sollten Sie in der Lage sein, CONVERT_TZ
andere Zeitzonenfunktionen zu verwenden.
Unter Mac OS Catalina bei Verwendung von XAMPP
Gehen Sie im Terminal zum Ordner / Applications / XAMPP / xamppfiles / bin und führen Sie die folgenden Schritte aus.
./mysql_tzinfo_to_sql / usr / share / zoneinfo | sed -e "s / Lokale Zeitzone muss eingestellt sein - siehe zic Handbuchseite / local /" | ./mysql -u root mysql
Das hat bei mir funktioniert.