MySql时间戳 - 更新所有行后的不同时间

Laj*_*rek 5 php mysql

我需要更新events表格中的所有行.有一个event_date带有timestamp数据类型的列.

但是如果我event_date用新日期更新每一行(列)(例如:2015-12-12 12:00:00),那么我有一些值为2015-12-12 13:00:00的行.

要点是 - 为什么有些行是正确的,有些是+ 1h?

在PHP中我使用Nette框架和他的DateTime对象,它扩展了标准PHP DateTime ...

任何想法,暗示为什么会发生这种情况?

编辑:查询看起来像这样:

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

php中的值我设置如下:

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

问题开始得更早 - 在这个表中是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
Run Code Online (Sandbox Code Playgroud)

那个选择给我这样的行:

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
Run Code Online (Sandbox Code Playgroud)

它表示:id,event_date(实际db值),event_date_to(实际db值),event_date(insert的新值),event_date_to(insert的新值 - 可以为NULL)

并保存到csv文件...这个文件我正在解析现在和foreach更新每一行...

我查了所有查询,时间还可以(12:00:00)所以我不理解并且卡住了:)

小智 2

您的 MySQL 时区可能与您的代码的时区(在 php.ini 中指定)不同。

要测试这一点,请尝试将此值插入到DATETIMEorTIMESTAMP列中:

foo_column = NOW()

同时,插入$datetime到一个单独的列中 - 假设$datetime简单地等于当前时间:date('Y-m-d H:i:s', time())

bar_column = '$datetime'

如果值不同 - 那么就可以了。您的数据库本质上对时间的解释与您的 php.ini 不同。