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.