Intereting Posts
Загрузить изображение с API facebook Реализация group_by и использование в Laravel с использованием Eloquent Добавить пару ключ / значение между двумя парами в массиве Regex не работает для некоторых случаев – PHP PHP: лучший способ конвертировать дату и время в строку времени? Magento: Как проверить, зарегистрирован ли администратор в контроллере модуля? laravel – получить параметры из запроса http скрыть и показать div нажмите на кнопку как правильно использовать функцию switch в php PHP: как я могу заблокировать прямой доступ к URL-адресу для файла, но все-таки разрешить его загрузку вошедшим в систему пользователям? Каков самый простой способ добавления сервлетов Java на WAMP-настроенную машину? Случайный взвешенный выбор события как читать несколько xml-содержимого в файле, используя php Удалить имя подпапки с сайта WordPress с помощью htaccess копировать данные после того, как пользователь выберет его

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

У меня есть приложение с 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

ОБНОВИТЬ

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

set sql_mode=NO_ENGINE_SUBSTITUTION; set global sql_mode=NO_ENGINE_SUBSTITUTION;

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

UPDATE2 Как избавиться от STRICT навсегда? Как избавиться от режима STRICT SQL в MySQL

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

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

  • PING вызывает 500 Internal Server Error – неправильное значение даты и времени (ошибка AuthPuppy # 907203)

Константы даты в zend определяются исходя из локализации в этом порядке (форма zend_locale comments)

 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 и анализирует результаты.

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

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

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

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

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

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

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