2015-11-03 85 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有着不同的解釋時間。