2015-11-03 3 views
5

Мне нужно обновить все строки в моей таблице events. Существует столбец event_date с типом данных временной отметки.MySql timestamp - разное время после обновления всех строк

Но если я обновляю каждую строку (event_date) с новой датой (пример: 2015-12-12 12:00:00), то у меня есть несколько строк со значением 2015-12-12 13:00:00.

Точка - почему некоторые строки правильные, а некоторые - 1 час?

В PHP я использую рамки Nette и его объект DateTime, который расширяет стандартную PHP DateTime ...

Любые идеи, подсказки, почему это happends?

EDIT: запрос выглядит следующим образом:

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

значения в PHP я ставлю так:

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

Проблема начинается рано - в этой таблице был период, как 2016-2-13 00 : 00: 00, но после выбора и эхо-дат сменились на 2016-2-12 23:00:00 - но не все строки ... только некоторые. Поэтому я сделать выбор:

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 

Это выбрать дать мне строки, как это:

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 

Это означает: идентификатор, event_date (реальное значение дб), event_date_to (реальное значение дб), event_date (новое значение для вставки), event_date_to (новое значение для вставки - может быть NULL)

и сохранены в файл CSV ... Этот файл я разборе теперь и в Еогеасп обновляет каждую строку ...

Я проверил все запросыd раз в порядке (12:00:00), поэтому я не понимаю и застрял :)

+0

К сожалению, если вы вставляете их одинаково, должно быть что-то еще происходит. Я сомневаюсь, что MySQL случайно добавляет час. Возможно, есть проблема с форматированием вставки, или некоторые значения фактически вставляются как 13:00:00? Сбросили ли вы свои вставные инструкции (sql), чтобы сравнить значения? Не могли бы вы разместить некоторые из этих sql здесь, может быть, даже с скриншотом о том, как они попадаются после вставки? –

+0

И как вы их обновляете?Какой фактический запрос используется –

+0

Я подозреваю, что вы, вероятно, должны использовать тип данных 'datetime', а не' timestamp' - отметки времени обычно используются для регистрации последнего раза, когда на запись повлияло использование 'on update CURRENT_TIMESTAMP' (примерно MySQL 5.1 IIRC) – CD001

ответ

2

Ваш часовой пояс MySQL, вероятно, отличается от вашего кода (указанного в php.ini).

Чтобы проверить это, попробуйте вставить это значение в DATETIME или TIMESTAMP колонки:

foo_column = NOW()

Одновременно вставьте $datetime в отдельной колонке - позволяет говорить $datetime просто равна текущее время: date('Y-m-d H:i:s', time())

bar_column = '$datetime'

Если значения разные - тогда e у вас есть это. Ваша база данных по существу интерпретирует время по-разному с вашим php.

Смежные вопросы