Doctrine 1のアプリがあり、new Zend_Date->getIso()
を介してオブジェクトのupdate_datetime
フィールドを生成します。何年も問題なく動作しましたが、新しいノートブックを入手しましたおよびDoctrineは、完全に奇妙な通常のMySQL日時フォーマット"2013-07-12T03:00:00+07:00"
ではなく、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
[〜#〜]更新[〜#〜]
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
を削除します
UPDATE2STRICTを永久に取り除く方法は? MySQLでSTRICT SQLモードを削除する方法
存在する場合は、my.iniのsql-modeからSTRICT_TRANS_TABLES
を削除してみてください。
これにより、mysql datetimeに変換されていない形式を含むdatetime文字列値でこのエラーが発生する可能性があります。このmy.iniの変更は、次の修正として報告されました。
Zendの日付定数は、この順序でロケールをスニッフィングして決定されます(zend_localeコメントを形成)
1. Given Locale
2. HTTP Client
3. Server Environment
4. Framework Standard
2つのシステムの違いがサーバー環境に反映されると思います。
将来この問題を修正して回避するために、これらの構成ディレクティブを使用してapplication.ini内でロケールオプションを指定できます。
resources.locale.default = <DEFAULT_LOCALE>
resources.locale.force = false
resources.locale.registry_key = "Zend_Locale"
ロケールはen_US
のような文字列に設定する必要があります
Zend_Localeは、具体的には setlocale を呼び出して結果を解析することにより、環境からロケールを探知します。
これは、Zendがタイムスタンプ形式をMySQLが期待するものと一致する形式に設定していないことが原因です。 MySQLでSTRICTモードを無効にすることもできますが、これはハッキングであり、解決策ではありません(MySQLは、入力している日付が何であるかを推測しようとします)。
Zendでは、日時形式をMySQLがこれを解決することを期待しているものに設定できます。
$log = new Zend_Log ();
$log->setTimestampFormat("Y-m-d H:i:s");
StackOverflowコミュニティの助けを借りて、ようやく解決しました。問題は、sql_mode変数のSTRICT_TRANS_TABLESにありました。しかし、/ etc/my.cnfでそれを変更するだけでは不十分に思われたため、mysql -urootを実行して次のように入力する必要がありました。
sql_mode = NO_ENGINE_SUBSTITUTIONを設定します。グローバルsql_mode = NO_ENGINE_SUBSTITUTIONを設定します。
したがって、STRICT_TRANS_TABLESを削除します
------この答えは機能します