php mysql zend-framework doctrine doctrine-1.2

php - MYSQL incorrecto formato DATETIME



zend-framework doctrine (4)

Tengo una aplicación con Doctrine 1 y genero campos update_datetime para objetos a través del new Zend_Date->getIso() . Funcionó muy bien durante años, pero ahora tengo un nuevo bloc de notas y Doctrine intenta insertar los campos DATETIME como una cadena "2013-07-12T03:00:00+07:00" lugar del formato de fecha y hora de MySQL normal "2013-07-12 00:00:00" que es totalmente extraño.

El mismo código funciona bien en otra computadora. Todo es casi idéntico: MySQL 5.6.12, PHP 5.3.15 en ambos. ¿Alguna idea de dónde debería mirar?

Fatal error: Uncaught exception ''Doctrine_Connection_Mysql_Exception'' with message ''SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: ''2013-07-12T03:00:00+07:00'' for column ''nextrun'' at row 1'' in library/Doctrine/Connection.php:1083

ACTUALIZAR

Ok, con la ayuda de la comunidad de StackOverflow finalmente lo resolví. El problema era con STRICT_TRANS_TABLES en la variable sql_mode . Pero cambiarlo en /etc/my.cnf no parecía suficiente, así que tuve que ejecutar mysql -uroot y escribir lo siguiente:

set sql_mode=NO_ENGINE_SUBSTITUTION; set global sql_mode=NO_ENGINE_SUBSTITUTION;

Así eliminando STRICT_TRANS_TABLES

ACTUALIZACIÓN2 ¿Cómo deshacerse de STRICT para siempre? Cómo deshacerse del modo STRICT SQL en MySQL


Esto se debe a que Zend no establece su formato de marca de tiempo en uno que coincida con lo que MySQL espera. Podría desactivar el modo STRICT en MySQL, pero esto es un truco y no una solución (MySQL intentará adivinar cuál es la fecha que está ingresando).

En Zend puede configurar el formato de fecha y hora a lo que MySQL espera para resolver esto:

$log = new Zend_Log (); $log->setTimestampFormat("Y-m-d H:i:s");


Las constantes de fecha en zend se determinan al rastrear la configuración regional en este orden (form zend_locale comments)

1. Given Locale 2. HTTP Client 3. Server Environment 4. Framework Standard

Estoy pensando que la diferencia entre los dos sistemas se reflejará en el entorno del servidor.

Para corregir y evitar este problema en el futuro, puede especificar las opciones de configuración regional dentro de su application.ini usando estas directivas de configuración.

resources.locale.default = <DEFAULT_LOCALE> resources.locale.force = false resources.locale.registry_key = "Zend_Locale"

La configuración regional debe establecerse en una cadena como en_US

Zend_Locale olfatea de forma específica la configuración regional del entorno desde una llamada a setlocale y analiza los resultados.


Ok, con la ayuda de la comunidad de finalmente lo resolví. El problema era con STRICT_TRANS_TABLES en la variable sql_mode. Pero cambiarlo en /etc/my.cnf no parecía suficiente, así que tuve que ejecutar mysql -uroot y escribir lo siguiente:

establecer sql_mode = NO_ENGINE_SUBSTITUTION; establecer global sql_mode = NO_ENGINE_SUBSTITUTION;

Así eliminando STRICT_TRANS_TABLES

------ esta respuesta funciona