2010-12-30 7 views
11

In MySQL è possibile impostare una variabile di sessione denominata time_zone per modificare il fuso orario. Questo è utile per es. quando si guardano i timestamp da un altro paese. Ecco un esempio:MySQL: impostazione time_zone nel file di opzioni my.cnf

mysql> select now(); 
+---------------------+ 
| now()    | 
+---------------------+ 
| 2010-12-30 18:59:18 | 
+---------------------+ 
1 row in set (0.00 sec) 

mysql> set time_zone='Brazil/East'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> select now(); 
+---------------------+ 
| now()    | 
+---------------------+ 
| 2010-12-30 09:59:29 | 
+---------------------+ 
1 row in set (0.00 sec) 

È possibile inserirlo in un file di opzioni, ad es. .my.cnf?

Quando ci provo, non funziona. Tutto quello che ottiene è:

mysql: unknown variable 'time_zone=Brazil/East' 
+1

Qual è il tuo sistema operativo? –

risposta

16

Va

default_time_zone=Brazil/East 

dettagli: http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_time_zone

Format Opzione-File = Default_time_zone

+0

Grazie. Questo funziona. – emx

+0

Ricevo 'mysql: [ERRORE] variabile sconosciuta 'default_time_zone = Brazil/East'' quando inserisco questo nella mia'/etc/mysql/conf.d/mysql.cnf' sotto la sezione '[mysql]'. Versione 5.7.20. – kev

+0

Inserendolo in '[mysqld]' il server non si riavvia e si chiude con: 'Job per mysql.servizio non riuscito perché il processo di controllo è terminato con codice di errore. Vedi "systemctl status mysql.service" e "journalctl -xe" per i dettagli. – kev

1

Non sono sicuro di cosa sia cambiato in Xampp, ma questa soluzione funziona solo se si posiziona questa linea nella posizione corretta. Fidati di me ho provato molte volte e ho dovuto fare una ricerca abbastanza approfondita per trovare questa soluzione.

default-time-zone = "+00:00" 

Esempio:

read_rnd_buffer_size = 512K 
myisam_sort_buffer_size = 8M 
default-time-zone = "+00:00" <--- Place here. 
log_error = "mysql_error.log" 

https://community.apachefriends.org/f/viewtopic.php?f=16&t=47656

Inoltre, ti consigliamo di essere sicuri di aver popolato il database con i nomi propri di fuso orario, se avete intenzione di usare "l'America/Los_Angeles". Consiglierei di usare l'offset. In realtà ti consiglio di utilizzare UTC come base, quindi di convertire il tuo tempo da quel punto per gli utenti in base al fuso orario, il che ti farà risparmiare molti mal di testa in seguito e manterrà il tuo database bello e uniforme. Controlla la guida che ho linkato qui sotto spiegata molto chiaramente per me e ho utilizzato questo sistema. Ci sono molti modi per codificarlo, ma adottare questo approccio ti farà risparmiare un sacco di problemi.

http://www.vertabelo.com/blog/technical-articles/the-proper-way-to-handle-multiple-time-zones-in-mysql

1

Un po 'in ritardo, ma questo potrebbe essere utile comunque:

Quando si imposta in modo esplicito il fuso orario, verificare che si sta utilizzando il nome fuso orario corretto, tenendo presente i molti sono stati deprecati. È possibile utilizzare https://en.wikipedia.org/wiki/List_of_tz_database_time_zones per confermare.

Nel mio caso, utilizzando MySQL 5.7, il nome del fuso orario deprecato non funzionava quando lo si aggiungeva sotto il [mysqld] nel mio file mysqld.cnf. Ha funzionato il nuovo nome del fuso orario e il riavvio del servizio mysql.

Così per @ Kev utente qui, utilizzando America/Sao_Paulo dovrebbe funzionare, invece di usare Brasile/Est.