どうやら、日時の値は有効なMySQL日時 ではありません 。ただし、サーバーSQLモードを変更する回避策があります。 a> 。
何らかの理由で、私の開発サーバーでは、MySQLのデフォルトモード構成が完全に削除されました。したがって、日時を挿入する方法に制限はありませんでした。
mysql> select @@sql_mode;
+------------+
| @@sql_mode |
+------------+
| |
+------------+
1 row in set (0.00 sec)
一方、本番サーバーでは、どのような種類の日時形式を受け入れるかをmysqlサーバーに指示する多くの制限がありました。
mysql> select @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
これは安全な方法ではありませんが、MySQLの制限モードをno_engine_substitution
に変更しました 、そして出来上がり、すべてが魅力のように機能します(ほぼ)。これを機能させるには、GLOBALモードとSESSIONモードを変更する必要があります。
標準のSQLモードは「NO_ENGINE_SUBSTITUTION」なので、モードをそれに設定します。タフに追加できるモードは他にもあります:
SET GLOBAL sql_mode = '<mode>';
SET SESSION sql_mode = '<mode>';
これで、GLOBALモードとSESSIONモードをNO_ENGINE_SUBSTITUTION
に設定する必要があります。mysql> SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION';
mysql> SELECT @@SESSION.sql_mode;
+------------------------+
| @@SESSION.sql_mode |
+------------------------+
| NO_ENGINE_SUBSTITUTION |
+------------------------+
1 row in set (0.00 sec)
mysql> SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';
mysql> SELECT @@GLOBAL.sql_mode;
+------------------------+
| @@GLOBAL.sql_mode |
+------------------------+
| NO_ENGINE_SUBSTITUTION |
+------------------------+
1 row in set (0.00 sec)