在我們的項目中,我們使用Zend框架的模式發生器,產生這樣的設置存儲在數據庫(MySQL的)作爲DATETIME字段屬性:MySQL插入到DATETIME:使用ISO :: 8601格式安全嗎?
public function setObjectDatetime($data) {
if (! $data instanceof Zend_Date) { ... some conversion code ... }
$this->objectDatetime = $data->toString(Zend_Date::ISO_8601);
}
所以ISO 8601 ::格式的字符串(」 2012-06-15T18:33:00 + 03:00「)是實際存儲爲屬性的內容。
當我們嘗試save
這個模型,並將此字符串傳遞給MySQL(版本5.5.16)時,出現問題:它引發警告,但仍然插入/更新相應的行並得到正確的結果。這很容易檢查問題是由MySQL造成的,而不是一些司機的行爲:剛發出這樣的查詢...
UPDATE table_name SET datetime_field = '2012-06-15T18:33:00+03:00' WHERE id = 1;
...,結果將是1 row affected, 1 warning
,與
1264 | Out of range value for column 'dt' at row 1
警告(由SHOW WARNINGS
顯示)。
對我來說,phpMyAdmin並沒有顯示任何警告;並且所有服務器端代碼都將這個查詢處理爲一個實體。 )
所以問題是:我們是否應該將我們模型中存儲的內容重新格式化爲另一種字符串格式(例如,'YY-MM-dd HH:mm:ss')或者它只是一些奇怪的行爲MySQL將被修復遲早?
尤其是在MySQL 5.7,你會得到一個錯誤這樣做。 「Y-m-d H:i:s」 – John