2015-11-03 10 views
5

Ho bisogno di aggiornare tutte le righe nella tabella events. C'è la colonna event_date con datatype datatamp.Timestamp MySql - orario diverso dopo l'aggiornamento di tutte le righe

Ma se aggiorno ogni riga (colonna event_date) con nuova data (esempio: 2015-12-12 12:00:00) allora ho alcune righe con valore 2015-12-12 13:00:00.

Il punto è: perché alcune righe sono corrette e alcune sono + 1 ora?

In PHP sto usando quadro Nette e il suo oggetto DateTime che si estende standart PHP DateTime ...

Tutte le idee, i suggerimenti perché questo happends?

EDIT: query simile alla seguente:

UPDATE `events` 
SET `event_date`='2016-2-13 12:00:00', `event_date_to`=NULL 
WHERE (`id` = 203) 

Valori in php io pongo in questo modo:

$row->event_date = date("Y-m-d H:i:s", $oldRow['event_date']); 

problema inizia presto - in questa tabella è stata data come 2016/02/13 00 : 00: 00 ma dopo aver selezionato ed echo le date sono cambiate a 2016-2-12 23:00:00 - ma non tutte le righe ... solo qualcuno. Così faccio selezionare:

select events.id, events.event_date, events.event_date_to, 
concat(year(event_date), '-', month(event_date), '-', 
day(event_date), ' 12:00:00') as new_event_date, 
IF(events.event_date_to IS NULL,null, concat(year(event_date_to), 
'-', month(event_date_to), '-', day(event_date_to), ' 12:00:00')) as 
new_event_date_to from events 

che selezionano dammi righe come questo:

769,2014-04-22 19:30:00,2014-04-22 21:45:00,2014-4-22 12:00:00,2014-4-22 12:00:00 

Significa: id, EVENT_DATE (valore reale db), event_date_to (valore db reale), EVENT_DATE (nuovo valore per l'inserimento), event_date_to (nuovo valore per l'inserimento - può essere NULL)

e salvati in un file csv ... Questo file sto parsing ora e in foreach aggiornare ogni riga ...

ho controllato tutte le query un d volte sono OK (12:00:00) quindi non capisco e bloccato :)

+0

Sfortunatamente se li stai inserendo nello stesso modo, deve esserci qualcos'altro che va avanti - dubito che MySQL aggiunga l'ora in modo casuale. Forse c'è un problema di formattazione sull'inserto, o alcuni dei valori si stanno effettivamente inserendo come 13:00:00? Hai scaricato le istruzioni di inserimento esattamente (la sql) per confrontare i valori? Potresti postare alcuni di questi sql qui, magari anche con uno screenshot di come si presentano una volta inseriti? –

+0

E come stai aggiornando quelli?Qual è la query effettiva utilizzata –

+0

Sospetto che probabilmente dovresti usare un tipo di dati 'datetime' piuttosto che' timestamp' - i timestamp sono generalmente usati per registrare l'ultima volta che un record è interessato usando 'in aggiornamento CURRENT_TIMESTAMP' (come di circa MySQL 5.1 IIRC) – CD001

risposta

2

Il tuo fuso orario MySQL è probabilmente dissimile da quello del tuo codice (specificato in php.ini).

Per verificare questa, provare ad inserire questo valore in una colonna DATETIME o TIMESTAMP:

foo_column = NOW()

Allo stesso tempo, inserire $datetime in una colonna separata - Diciamo $datetime semplicemente uguale al tempo corrente: date('Y-m-d H:i:s', time())

bar_column = '$datetime'

Se i valori sono diversi, quindi e tu ce l'hai. Il tuo database essenzialmente interpreta il tempo in modo diverso dal tuo php.

Problemi correlati