2013-10-08 19 views
6

Questo è stato chiesto prima ma non la risposta che sto cercando. Sto memorizzando tutte le mie date in MYSQL in UTC/GMT. Quando ho estratto utente sedi di dati che fa riferimento a che ora è meglio usare il CONVERT_TZ costrutto ...Qual è la migliore pratica per la gestione del fuso orario in MySQL?

SELECT CONVERT_TZ(mytime,'UTC',usertimezone) as mytime FROM table 

o è meglio per impostare temporaneamente la zona di seduta in MySQL e poi fare domande normali?

SET time_zone = usertimezone; 

E se uso il secondo, posso solo fare che una volta per ogni sessione utente o se non sto usando un aperto persistente, ho bisogno di impostare prima di ogni query?

+0

Qualsiasi motivo per non consentire che ciò avvenga nel client? –

+0

È molto lavoro elaborare ogni valore di tempo prima della visualizzazione. Cercando di fare un minimo di codifica. :) –

+0

Memorizza il fuso orario dell'utente e quindi lo usa per convertire UTC nel loro fuso orario. – Kermit

risposta

3

Se i dati sono memorizzati nelle colonne di tipo TIMESTAMP, allora è necessario SET time_zone e MySQL verrà convertito automaticamente in/da UTC sul recupero/inserimento — non è necessario fare altro. Questo è l'approccio raccomandato.

+0

Uso raramente il timestamp, ma piuttosto datetime. Questa applicazione è una raccolta di dati ad alto volume e voglio scrivere diversi record con lo stesso timestamp. –

+1

@DougWolfgram: è ancora possibile fornire un dato valore a un campo 'TIMESTAMP' ([inizializzazione e aggiornamento automatici] (http://dev.mysql.com/doc/en/timestamp-initialization.html) sono * facoltativi *, anche se attivo per impostazione predefinita). 'DATETIME' è una bestia diversa e non memorizza alcuna nozione di fuso orario (quindi MySQL * non può * eseguire alcuna conversione implicita alla sessione' time_zone'). – eggyal

+0

Non so. Quando uso set_timezone per impostare la mia sessione su UTC sembra forzare gli inserimenti datetime da convertire. –

7
  • Usa TIMESTAMP se si vuole MySQL per fare la conversione in base all'impostazione time_zone della sessione corrente.

  • Usa DATETIME se si sta tornando UTC alla vostra applicazione per poter gestire la conversione lì. (Questa sarebbe la mia preferenza.)

  • Non provare a mescolare. DATETIME non eseguirà alcuna operazione con l'impostazione time_zone e non è possibile assumere TIMESTAMP come UTC quando viene restituito all'applicazione, a meno che non si sia assolutamente certi che time_zone sia impostato su UTC.

Problemi correlati