質問: $pdo->exec("insert into servers (kind, address, db_name, note) values('1', '127.0.0.1', 'server1', 'test')"); ``` ここまで確認するとLaravelが原因なのはほぼ間違いないと思いますが、対応策が分かりません。 恐らく、LaravelのDB::insertメソッド内で正常なtimestamp値の範囲であるかどうかをチェックしているのではないかと思いましたが、Laravelのソースコードが追えず、原因と対応策が分からない状態です。 質問の修正依頼に「SHOW CREATE TABLE servers;」の結果を、ということでしたので追記します。 +---------+------------------------------------------------------------ | Table | Create Table +---------+------------------------------------------------------------ | servers | CREATE TABLE `servers` ( `id` int(11) NOT NULL AUTO_INCREMENT, `kind` varchar(3) CHARACTER SET utf8 NOT NULL, `address` varchar(15) CHARACTER SET utf8 NOT NULL, `db_name` varchar(255) CHARACTER SET utf8 DEFAULT NULL, `note` text CHARACTER SET utf8, `delete_flg` tinyint(1) NOT NULL DEFAULT '0', `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', `updated_by` varchar(50) CHARACTER SET utf8 DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=latin1 | +---------+------------------------------------------------------------ 1 row in set (0.00 sec)
回答: `config/database.php`のmysqlにある`strict`の値をfalseに変更してみてください。 ここで、configにstrictがtrueだったときにstrictModeメソッドが呼ばれ、下の方にあるSQLが実行されます。 ``` protected function strictMode() { return "set session 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'"; } ``` また、この一部を適用しておきたい場合はconfigのstrictをコメントアウトしてmodeというキーを指定します。modeの値には設定したいのsql_modeの値を入れます。