MYSQL неверный формат DATETIME

У меня есть приложение с Doctrine 1, и я генерирую update_datetime поля для объектов через new Zend_Date->getIso(), В течение многих лет он работал нормально, но теперь у меня есть новый ноутбук, и Doctrine пытается вставить DATETIME поля в виде строки "2013-07-12T03:00:00+07:00" вместо обычного формата даты и времени MySQL "2013-07-12 00:00:00" что совершенно странно.

Тот же самый код прекрасно работает на другом компьютере. Все почти идентично - MySQL 5.6.12, PHP 5.3.15 на обоих. Есть идеи, где мне искать?

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

ОБНОВИТЬ

Хорошо, с помощью сообщества Stackru я наконец решил это. Проблема была с STRICT_TRANS_TABLES в sql_mode переменная. Но меняя его в /etc/my.cnf казалось недостаточно, поэтому мне пришлось бежать mysql -uroot и введите следующее:

set sql_mode=NO_ENGINE_SUBSTITUTION; set global sql_mode=NO_ENGINE_SUBSTITUTION;

Таким образом, удаление STRICT_TRANS_TABLES

ОБНОВЛЕНИЕ2 Как избавиться от СТРИКТА навсегда? Как избавиться от режима STRICT SQL в MySQL

4 ответа

Решение

Если он существует, вы можете попробовать удалить STRICT_TRANS_TABLES из sql-mode в вашем my.ini.

Это может вызвать эту ошибку со строковым значением datetime, содержащим формат, который вы не конвертировали в mysql datetime. Это изменение my.ini было исправлено в:

Это вызвано тем, что Zend не установил формат вашей метки времени в соответствии с тем, что ожидает MySQL. Вы можете отключить режим STRICT в MySQL, но это взлом, а не решение (MySQL попытается угадать, какую дату вы вводите).

В Zend вы можете установить формат даты и времени на то, что MySQL ожидает, чтобы решить эту проблему:

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

Константы даты в Zend определяются из определения локали в этом порядке (комментарии от zend_locale)

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

Я думаю, что разница между этими двумя системами будет отражена в серверной среде.

Чтобы исправить и избежать этой проблемы в будущем, вы можете указать параметры локали в вашем application.ini, используя эти директивы конфигурации.

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

Локаль должна быть установлена ​​на строку вроде en_US

Zend_Locale определенно извлекает локаль из окружения от вызова setlocale и анализа результатов.

Хорошо, с помощью сообщества Stackru я наконец решил это. Проблема была с STRICT_TRANS_TABLES в переменной sql_mode. Но изменить его в /etc/my.cnf оказалось недостаточно, поэтому мне пришлось запустить mysql -uroot и набрать следующее:

set sql_mode=NO_ENGINE_SUBSTITUTION; установить глобальный sql_mode=NO_ENGINE_SUBSTITUTION;

Таким образом удаляя STRICT_TRANS_TABLES

------ этот ответ работает

Другие вопросы по тегам