2013-08-13 16 views
21

Sto tentando di caricare fusi orari nel mio esempio MySql (che è in esecuzione su Unbuntu) in modo che posso usare la funzione CONVERT_TZ ma quando ho eseguito il seguente comando:Impossibile caricare i fusi orari?

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

ottengo il seguente output e quando ho tenta di utilizzare CONVERT_TZ appena ritorna NULL ancora:

Attenzione: Impossibile caricare '/ usr/share/zoneinfo/Asia/Riyad87' come il tempo orario. Saltarlo. Avviso: impossibile caricare '/ usr/share/zoneinfo/Asia/Riyadh88' come fuso orario. Saltarlo. Attenzione: impossibile caricare '/ usr/share/zoneinfo/Asia/Riyadh89' come zona . Saltarlo. Avviso: impossibile caricare '/ usr/share/zoneinfo/Mideast/Riyadh87' come fuso orario. Saltarlo. Attenzione: impossibile caricare '/ usr/share/zoneinfo/Mideast/Riyadh88' come zona . Saltarlo. Avviso: impossibile caricare '/ usr/share/zoneinfo/Mideast/Riyadh89' come fuso orario. Saltarlo. Attenzione: impossibile caricare '/usr/share/zoneinfo/iso3166.tab' come zona . Saltarlo. Avviso: impossibile caricare "/ usr/share/zoneinfo/posix/Asia/Riyadh87" come fuso orario. Saltarlo. Avviso: impossibile caricare '/ usr/share/zoneinfo/posix/Asia/Riyadh88' come fuso orario . Saltarlo. Avviso: impossibile caricare '/ usr/share/zoneinfo/posix/Asia/Riyadh89' come fuso orario. Saltarlo. Attenzione: impossibile caricare '/ usr/share/zoneinfo/posix/Mideast/Riyadh87' come fuso orario. Saltarlo. Avviso: impossibile caricare '/ usr/share/zoneinfo/posix/Mideast/Riyadh88' come fuso orario. Salta it. Avviso: impossibile caricare '/ usr/share/zoneinfo/posix/Mideast/Riyadh89' come fuso orario. Salta it. Avviso: impossibile caricare '/ usr/share/zoneinfo/right/Asia/Riyadh87' come fuso orario. Saltarlo. Avviso: impossibile caricare '/ usr/share/zoneinfo/right/Asia/Riyadh88' come fuso orario. Saltarlo. Avviso: impossibile caricare '/ usr/share/zoneinfo/right/Asia/Riyadh89' come fuso orario . Saltarlo. Avviso: impossibile caricare '/ usr/share/zoneinfo/right/Mideast/Riyadh87' come fuso orario. Salta it. Avviso: impossibile caricare '/ usr/share/zoneinfo/right/Mideast/Riyadh88' come fuso orario. Salta it. Avviso: impossibile caricare '/ usr/share/zoneinfo/right/Mideast/Riyadh89' come fuso orario. Salta it. Avviso: impossibile caricare '/usr/share/zoneinfo/zone.tab' come zona . Saltarlo.

Qualcuno ha un'idea del motivo per cui ciò avverrebbe?

PS:

sto usando il seguente metodo per convertire datetimes:

CONVERT_TZ(NOW(),'UTC', 'PCT') 

è mai possibile che io sono solo convertendo in modo non corretto e che è la causa dei risultati NULL?

+0

Il primo comando nella pipeline, questo script 'mysql_tzinfo_to_sql', emette un grosso file .sql se non lo si canalizza direttamente in' mysql'. Che aspetto ha questo file? Avete bisogno dei dati storici sul fuso orario dell'Arabia Saudita? –

+0

No, in pratica mi limiterò a convertire da UTC a PST. Suppongo che tu non voglia che pubblichi l'intero brutto script sql. C'è qualcosa di specifico che dovrei cercare nel file .sql? –

risposta

23

Si tratta di un bug con i file di fuso orario per Riyadh * su Debian:

http://bugs.mysql.com/bug.php?id=20545

La soluzione consigliata è quella di ignorare semplicemente l'avviso (se non hai bisogno di quelli fuso orario del corso):

mysql_tzinfo_to_sql /usr/share/lib/zoneinfo | mysql -uroot --force mysql 

Dopo l'importazione dei dati TZ con l'opzione --force, si sarà in grado di utilizzare CONVERT_TZ. Ecco una trascrizione di ciò che ho appena fatto:

sh$ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -uroot -p mysql --force 2> /dev/null 
Enter password: ******** 
sh$ mysql -p 
Enter password: ******** 
Server version: 5.1.49-3 (Debian) 

mysql> select convert_tz(now(), 'UTC', 'CET'); 
+---------------------------------+ 
| convert_tz(now(), 'UTC', 'CET') | 
+---------------------------------+ 
| 2013-08-13 21:04:34    | 
+---------------------------------+ 
1 row in set (0.00 sec) 
+1

Grazie per le informazioni. Sembra che avessi installato tutto ciò di cui avevo bisogno, ma diventavo nullo perché stavo convertendo in 'PST' invece di' PST8PDT' ... –

+3

@AbeMiessler: D In caso di dubbi su un nome TZ, potresti interrogare 'mysql. time_zone_name' per un controllo rapido. Se il tuo caso particolare: 'seleziona il nome da mysql.time_zone_name dove nome come '% PST%';' –

1

Sfortunatamente, la soluzione di Sylvain non ha funzionato per me.

Sono riuscito a popolare le tabelle del fuso orario del nostro server di produzione esportando le tabelle dallo PHPMyAdmin del mio computer di sviluppo (su Windows) e modificando leggermente lo script di creazione.

Poiché lo script è troppo lungo per essere condiviso in un post, lo ospiterò sul mio Google Drive.

lo script di installazione (con nuove linee e commenti spogliato):

https://drive.google.com/file/d/0B7iwL5F-hwr_YkItRXk2Z1VZdlE/view?usp=sharing

Lo script con i commenti:

https://drive.google.com/file/d/0B7iwL5F-hwr_dWdjTDREcXNHQmM/view?usp=sharing

Assicurarsi di utilizzare la versione senza commenti. La versione dei commenti impiega circa 5 minuti per essere eseguita e finisce per non funzionare per qualche motivo mentre la versione ridotta richiede meno di 5 secondi per essere eseguita.

Nota: Probabilmente sarà necessario eseguire come root affinché funzioni.