はじめに
LaravelのSeederでテストデータを入力しようとした際に、次のエラーが発生した。
SQLSTATE[HY000]: General error: 1364 Field 'カラム名' doesn't have a default value
NOT NULLであるフィールドにNULLをInsertした事によりエラーが出たようだ。
今回はこの警告を無効化することで対処する。
環境
- Laravel 5.5.45
- MySQL 5.7.26
対処法
config/database.phpのstrictの値をfalseに設定する。
database.php
'mysql' => [
// 略
// 'strict' => true,
'strict' => false,
// 略
],
原因
strictがtrueになっていると、次のようにsql_modeが設定される。
mysql> select @@GLOBAL.sql_mode;
+---------------------------------------------------------------------------------------+
| @@GLOBAL.sql_mode |
+---------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+---------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
sql_modeにSTRICT_TRANS_TABLESが設定されていると、無効な値が挿入された場合にエラーを出すようになる。