【发布时间】:2015-11-03 15:17:27
【问题描述】:
我需要更新events 表中的所有行。有带有时间戳数据类型的列event_date。
但是,如果我用新日期(例如:2015-12-12 12:00:00)更新每一行(event_date 列),那么我有一些值为 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)
我在 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(real db value), event_date_to(real db value), event_date(插入的新值), event_date_to(插入的新值 - 可以为NULL)
并保存到 csv 文件...我现在正在解析这个文件,并在 foreach 中更新每一行...
我检查了所有查询并且时间都正常(12:00:00)所以我不明白并卡住了:)
【问题讨论】:
-
不幸的是,如果您以相同的方式插入它们,那么肯定会发生其他事情 - 我怀疑 MySQL 是否会随机添加小时。也许插入时存在格式问题,或者某些值实际上插入为 13:00:00?您是否准确地转储了您的插入语句(sql)来比较这些值?您能否在此处发布一些此 sql,甚至可以附上插入后如何遇到的屏幕截图?
-
你是如何更新这些的?实际使用的查询是什么
-
我怀疑您可能应该使用
datetime数据类型而不是timestamp- 时间戳通常用于记录上次使用on update CURRENT_TIMESTAMP影响记录的时间(关于 MySQL 5.1 IIRC) -
也许添加一些sn-ps。这有点难以回答你的问题
-
这可能是夏令时的问题 - TIMESTAMP 知道但 DATETIME 字段不知道