2013-05-17 6 views
6

Sto esportando la tabella mysql per impostarlo su live, ma durante l'esportazione di DB ho notato che il mio valore della colonna sta cambiando .. Se fosse "2007-06- 11 00:00:00 "prima e dopo l'esportazione ora è cambiato in" 2007-06-10 18:30:00 ",Il valore della data nelle tabelle mysql cambia durante l'esportazione mysql db

perché è così?
qualcuno ha idea di questo?

+0

sì in il tipo è 'timestamp', io sto vedendo le modifiche nel file di esportazione e sul nuovo server, sto esportando i dati tramite phpmyadmin -> scheda di esportazione, la versione di mysql è 5.0.8 – ashish

+0

esiste un modo per correggere solo quei dati caricati sul nuovo server? – ashish

risposta

4

Bug #13052 esisteva nelle versioni di MySQL prima del 5.0.15, in cui i file di dump espressi TIMESTAMP colonne nel fuso orario del server, ma non ha incluso un comando SET TIME_ZONE per assicurare chiunque (o qualsiasi server successiva) la lettura del file dump capito che; senza tale comando, i server di ricezione presumono che tutti i valori TIMESTAMP siano nel fuso orario predefinito.

Pertanto, un trasferimento tra server in fusi orari spostato alle 18:30 (ad esempio dall'Australia Meridionale alla California) comporterebbe il comportamento osservato.

Le soluzioni a questo problema, in qualche modo vaga di preferenza, sono:

  1. aggiornare la versione di mysqldump sul server originale al 5.0.15 o successiva (si tradurrà nel file di dump che esprime tutti i valori TIMESTAMP in UTC, con una dichiarazione SET TIME_ZONE idonea all'inizio);

  2. prima dell'esportazione (o importare), modificare la variabile globale time_zone sulla sorgente (o destinazione) del server, in modo che corrisponda l'impostazione sull'altro server al momento dell'importazione (o esportazione):

    SET GLOBAL time_zone = 'America/Los_Angeles'; -- ('Australia/Adelaide') 
    
  3. UPDATE i dati dopo il fatto, applicando la funzione di MySQL CONVERT_TZ():

    UPDATE my_table 
    SET my_column = CONVERT_TZ(
            my_column, 
            'America/Los_Angeles', 
            'Australia/Adelaide' 
            ); 
    

Se usin g o soluzione 2 o soluzione 3, fare attenzione a utilizzare il fuso orario esatto della variabile time_zone del server pertinente, in modo tale da includere qualsiasi ora legale. Tuttavia, si noti che come documentato in MySQL Server Time Zone Support: "Fusi orari denominati possono essere utilizzati solo se le tabelle di informazioni sul fuso orario nel database mysql sono state create e popolate." L'articolo prosegue per spiegare come creare e popolare il fuso orario. tabelle informative.

+0

C'è un modo in cui posso correggere i dati caricati sul server live? – ashish

+0

@ashish: non ho già risposto? – eggyal

+0

sì sì, funziona per me. – ashish

2

prima banca dati di esportazione basta seguire i passaggi qui sotto:

esportazione opzione personalizzata

con deselezionare la casella di controllo sotto

Dump TIMESTAMP columns in UTC (enables TIMESTAMP columns to be dumped and reloaded between servers in different time zones) 

spettacolo immagine qui sotto i dati enter image description here