Risposte:
Ciò accadrà se non hai caricato la tabella dei fusi orari in mysql.
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Ho trovato questo thread dopo aver trascorso un po 'di tempo cercando di capire perché dopo aver eseguito il comando nella risposta accettata (che è la stessa sul sito di sviluppo di MySQL) il comando non è stato in grado di convertire tra fusi orari come
SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','MET') AS time
Si scopre che su OS X ci sono due file che causano problemi: /usr/share/zoneinfo/Factory
e /usr/share/zoneinfo/+VERSION
.
La correzione ... spostando temporaneamente questi file in una posizione diversa come /usr/share/zoneinfo/.bak/
consente il comando
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
per popolare completamente tutte le informazioni sul fuso orario previsto.
Questo può o non può essere un bug nella mia versione installata di MySQL:
$ mysql --version
mysql Ver 14.14 Distrib 5.6.11, for osx10.6 (x86_64) using EditLine wrapper
Sto anche operando in STRICT_MODE
.
In ogni caso, spero che questo faccia risparmiare qualche grattacapo a chiunque cerchi la soluzione.
Oltre all'ambiente Windows, puoi impostare il fuso orario per
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
In ambiente 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
(ad esempio C: \ Programmi \ MySQL \ data \ mysql) `
4. Start MySQL server
..Il tuo lavoro è finito ..
Se stai ancora ottenendo NULL
per CONVERT_TZ
Scarica queste tabelle di database e inseriscilo nel database mysql http://www.4shared.com/folder/Toba2qu-/Mysql_timezone.html
Ora il tuo problema sarà risolto .. :)
Se stai usando MySql su Windows devi caricare i dati del fuso orario nello schema mysql. Ecco un buon HOWTO: http://www.geeksengine.com/article/populate-time-zone-data-for-mysql.html
Se non lo fai, la funzione CONVERT_TZ non riconoscerà il fuso orario di input (cioè i tuoi esempi: 'UTC', 'Asia / Jakarta') e restituirà semplicemente NULL.
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, non c'è alcuna cartella di dati ora C:\Program Files\MySQL\
come in altre risposte.
2) In tal caso, cerca C:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql
. Generalmente questa cartella è nascosta e C:\ProgramData\
alcune volte non la vedrai .
3) Modificare la scheda Impostazioni nella visualizzazione per vedere i file e le cartelle nascosti come spiegato qui https://irch.info/index.php?pg=kb.page&id=133
4) Arresta il servizio MySQL cercando "servizi" nel pulsante Start di Windows.
5) Quindi decomprimere il fuso orario_2017c_posix.zip e quindi copiare i file al suo interno (copiare i file direttamente, non copiare l'intera cartella stessa) e incollare
C:\ProgramData\MySQL\MySQLServer5.x\Data\mysql\
6) Per MySQL 5.7, timezone_2017c_posix.zip fornirà solo un file .sql dopo la decompressione e potrebbe non risolvere il problema. Quindi vai avanti e scarica il file zip per 5.6 anche se stai eseguendo MySQL 5.7 e copia quei file inC:\ProgramData\MySQL\MySQL Server 5.x\Data\mysql\
7) Riavvia il server MySQL. Per verificare se CONVERT_TZ () funziona, eseguire questa query sql.
SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','Asia/Jakarta');
e controlla l'output non nullo.
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
se ricevi l'errore, data too long for column 'abbreviation' at row 1
consulta: https://bugs.mysql.com/bug.php?id=68861
la soluzione sarebbe eseguire quanto segue
questo aggiungerà una riga per disabilitare la modalità mysql e consentire a mysql di inserire dati troncati ciò era a causa di un bug di mysql in cui mysql avrebbe aggiunto un carattere nullo alla fine (secondo il collegamento sopra)
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
Questi sono i passaggi per farlo funzionare se sei in Windows e utilizzi MySQL 5.7.
mysql -u root -p password
.use mysql
per selezionare il database MySQL.Una volta completato con successo, dovresti essere in grado di utilizzare CONVERT_TZ
e altre funzioni del fuso orario.
Su Mac OS Catalina quando si utilizza XAMPP,
Vai alla cartella / Applicazioni / XAMPP / xamppfiles / bin nel Terminale, quindi esegui come segue.
./mysql_tzinfo_to_sql / usr / share / zoneinfo | sed -e "s / Il fuso orario locale deve essere impostato - vedere la pagina di manuale di zic / local /" | ./mysql -u root mysql
Questo ha funzionato per me.