2015-11-03 117 views
5

我需要更新我的events表中的所有行。列event_date带有时间戳数据类型。MySql时间戳 - 更新所有行后的不同时间

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

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

在PHP中我使用•奈特框架和延伸非标准PHP的DateTime他DateTime对象...

任何想法,暗示为什么happends?

编辑:查询看起来是这样的:

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 

这意味着:ID,活动日期(实际分贝值),event_date_to(真正的分贝值),活动日期(新价值对于插入),event_date_to(用于插入新的价值 - 可以为null)

,并保存到CSV文件...这个文件我解析当前和更新的foreach每一行...

我检查了所有的查询一个d时间还可以(12:00:00)所以我不明白并卡住:)

+0

不幸的是,如果你以同样的方式插入它们,那么肯定还有别的事情发生 - 我怀疑MySQL会随机添加小时。也许在插入时出现格式问题,或者某些值实际上是作为13:00:00插入的?你准确地抛出了你的insert语句(sql)来比较这些值吗?你可以在这里发布一些这样的sql,甚至可以使用一次插入后的屏幕截图吗? –

+0

你如何更新这些?什么是正在使用的实际查询 –

+0

我怀疑你应该使用'datetime'数据类型而不是'timestamp' - 时间戳记通常用于记录上次使用'on update CURRENT_TIMESTAMP'影响的记录(截至MySQL 5.1 IIRC) – CD001

回答

2

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

要进行测试,请尝试将这个值转换成DATETIMETIMESTAMP柱:

foo_column = NOW()

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

bar_column = '$datetime'

如果数值不同 - 那么ther你有它。你的数据库本质上与你的php有着不同的解释时间。