2013-10-15 31 views
0

所以我想知道如果我遇到了一個應該或多或少明顯的陷阱。MySQL內部日期到datetime轉換。 PHP(Zend Framework 1.11)作爲中間件

因此,讓我們說我們有一個名爲dateField的數據庫字段,它在datetime中。我們還假設表中的所有記錄都有這個值:2013-10-15 13:15:46

現在我們想提取日期範圍內的記錄。我們在網站前端使用2013-10-15(yyyy-mm-dd)格式。 (不,SQL注入是不可能的,它通過一個PDO:D)

我們還假設select的where語句是這樣插入的: $ select-> where('dateField> =?',$ dateFrom); $ select-> where('dateField < =?',$ dateTo);

所以,當我們有一系列這樣的:

來源: 2013年10月10日要:二○一三年十月一十六日一切正常。

但是像這樣的表達式: 來源: 2013-10-15 要: 2013-10-15就說明沒有結果! :d

我猜測的MySQL 內部轉換我的日期類型2013-10-152013-10-15 00:00:00和我的WHERE子句變爲:

SELECT .... WHERE dateField <= 2013-10-15 00:00:00 AND dateField >= 2013-10-15 00:00:00; 

當然在這種情況下2013-10-15 13:15:46是不是在我的WHERE子句。 :d:d

我通過僅比較的日期部分已經解決了這個問題:

$select->where('DATE(dateField) >= ?', $dateFrom); 
$select->where('DATE(dateField) <= ?', $dateTo); 

但我的問題是:

任何人都可以解釋一點關於MySQL的內部日期/ datetime轉換(低級別oprations)?

這個問題是否可以作爲社區wiki的一個很好的補充?

回答

1

如果沒有設置時間部分,那麼將這樣的DATE轉換爲DATETIME/TIMESTAMP將導致填充它的時間部分爲00:00:00 - 這是正常行爲(如描述的here)。

要得到它的工作 - 你需要指定你的時間部分明確2013-10-15 00:00:002013-10-15 23:59:59