convert_tz restituisce null


92

So che sembra stupido, ma quando lo uso

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

restituisce NULL. Sto usando MySQL Workbench in Ubuntu 12.04 a 64 bit e funziona sull'altro mio laptop / sistema operativo (anche usando MySQL Workbench).

Risposte:


173

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

1
Hai solo bisogno di farlo una volta o ogni volta che MySql si avvia?
Abe Miessler

3
Solo una volta. Carica le informazioni in una tabella in MySQL, che viene utilizzata da quel momento in poi.
Barmar

2
Puoi utilizzare il flag force per sovrascrivere anche qualsiasi errore in cui incappi: mysql_tzinfo_to_sql / usr / share / zoneinfo | mysql -u root --force -p mysql
scum

3
Avevo bisogno di riavviare anche il demone MySQL prima che entrasse in vigore (su Debian).
Ekster

2
Ciao, quando eseguo questo comando ho ricevuto un errore come questo: Attenzione: impossibile caricare "/usr/share/zoneinfo/iso3166.tab" come fuso orario. Saltarlo. Avviso: impossibile caricare "/usr/share/zoneinfo/zone.tab" come fuso orario. Saltarlo.
Ghanshyam Katriya

26

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/Factorye /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.


13

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 NULLper 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 .. :)



2

MAMP PRO

  1. Aperto 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/

Oltre alla posizione della cartella binaria, questo vale per macOS in generale. Grazie!
clic sul colonnello il

2

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.


1
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

Ho OSX El Capitan e questa è l'unica risposta per farlo funzionare. Per riferimento futuro: nel mio caso l'errore afferma: "Dati troppo lunghi per la colonna 'Abbreviazione' alla riga 1". Nota: tutti gli sforzi per eseguire (sudo) mkdir o (sudo) mv dei file menzionati in altre risposte risultano in 'Permission denied'
hepabolu

BTW non ho avuto bisogno di riavviare MySQL.
hepabolu

1

Questi sono i passaggi per farlo funzionare se sei in Windows e utilizzi MySQL 5.7.

  1. Fare clic con il tasto destro su Risorse del computer / Computer / Questo PC o qualunque sia il nome nel sistema operativo e selezionare Proprietà.
  2. Scegli "Impostazioni di sistema avanzate" dal pannello di sinistra.
  3. Scegli "Variabili d'ambiente", inserisci il percorso completo della tua directory bin di MySQL (generalmente si trova in C: \ Programmi \ MySQL \ MySQL Server 5.7 \ bin).
  4. Apri il prompt di cmd, entra in mysql usando mysql -u root -p password.
  5. Invio use mysqlper selezionare il database MySQL.
  6. Scarica il file "timezone_YYYYc_posix_sql.zip" (al posto di YYYY, sostituisci l'anno massimo disponibile in quella pagina come 2017 o 2018) da https://dev.mysql.com/downloads/timezones.html .
  7. Estrailo e apri il file nell'editor di testo.
  8. Copia il contenuto ed esegui nel prompt di cmd.

Una volta completato con successo, dovresti essere in grado di utilizzare CONVERT_TZe altre funzioni del fuso orario.


0

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.