MySQL неправильный формат DATETIME
у меня есть приложение с доктриной 1 и я создать update_datetime
поля для объектов через new Zend_Date->getIso()
. Он работал просто отлично в течение многих лет, но теперь я получил новый ноутбук и учение пытается вставить DATETIME
поля в виде строки "2013-07-12T03:00:00+07:00"
вместо обычного формата MySQL datetime "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
обновление
Ok с помощью сообщества StackOverflow я, наконец, решил его. Проблема была в 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-режима в вашем my.ini.
Это может вызвать эту ошибку со строковым значением datetime, содержащим формат, который вы не конвертируете в MySQL datetime. Это мое.изменение ini было сообщено как исправление в:
константы даты в zend определяются из вынюхивания локали в этом порядке (форма zend_locale комментарии)
1. Given Locale
2. HTTP Client
3. Server Environment
4. Framework Standard
Я думаю, что разница между двумя системами будет отражена в серверной среде.
исправить и избежать этой проблемы в будущем, вы можете указать параметры локали приложения.ini с помощью этой директивы конфигурации.
resources.locale.default = <DEFAULT_LOCALE>
resources.locale.force = false
resources.locale.registry_key = "Zend_Locale"
локаль должна быть установлена в строку en_US
Zend_Locale специфично нюхает локаль из среды из вызова setlocale и анализ результатов.
это вызвано тем, что Zend не устанавливает ваш формат метки времени в тот, который соответствует тому, что ожидает MySQL. Вы можете отключить строгий режим в MySQL, но это взлом, а не решение (MySQL попытается угадать, какую дату вы вводите).
в Zend вы можете установить формат datetime на то, что MySQL ожидает решить это:
$log = new Zend_Log ();
$log->setTimestampFormat("Y-m-d H:i:s");
Ok с помощью сообщества StackOverflow я, наконец, решил его. Проблема заключалась в STRICT_TRANS_TABLES в переменной sql_mode. Но изменение его в /etc / my.cnf казалось недостаточно, поэтому мне пришлось запустить mysql-uroot и ввести следующее:
установить sql_mode=NO_ENGINE_SUBSTITUTION; установить глобальный sql_mode=NO_ENGINE_SUBSTITUTION;
таким образом, удаление STRICT_TRANS_TABLES
------ этот ответ работает