En nuestro proyecto utilizar el generador Zend Framework Modelo, que produce algo como esto para establecer las propiedades que se almacenan en la base de datos (MySQL) como campos DATETIME:Inserción de MySQL a DATETIME: ¿es seguro usar el formato ISO :: 8601?
public function setObjectDatetime($data) {
if (! $data instanceof Zend_Date) { ... some conversion code ... }
$this->objectDatetime = $data->toString(Zend_Date::ISO_8601);
}
Así que la ISO 8601 :: cadena con formato (' 2012-06-15T18: 33: 00 + 03: 00 'por ejemplo) es lo que realmente se almacena como una propiedad.
El problema surge cuando tratamos de save
este modelo, y pasamos esta cadena a MySQL (versión 5.5.16): levanta la advertencia, pero aún inserta/actualiza la fila correspondiente con un resultado correcto. Es fácil comprobar que el problema está causado por MySQL, y no el comportamiento de algunos pilotos: acaba de emitir consulta como ...
UPDATE table_name SET datetime_field = '2012-06-15T18:33:00+03:00' WHERE id = 1;
... y el resultado será 1 row affected, 1 warning
, con
1264 | Out of range value for column 'dt' at row 1
advertencia (mostrado por SHOW WARNINGS
).
En mi conocimiento, phpMyAdmin no muestra ningún tipo de advertencia; y todo el código del lado del servidor procesó esta consulta como una sólida.)
Entonces, la pregunta es: ¿deberíamos cambiar el formato de lo que almacenamos en nuestro Modelo en otro formato de cadena ('AA-MM-dd HH: mm: ss', por ejemplo?) ¿O es simplemente un comportamiento extraño de MySQL que se solucionará tarde o temprano
Especialmente en MySQL 5.7 obtendrá un error hacer eso. "Y-m-d H: i: s" – John