LoginSignup
16
12

More than 5 years have passed since last update.

[MySQL] field 'カラム名' doesn't have a default valueのエラーの対処法

Last updated at Posted at 2018-08-22

環境
[Mysql ver5.7.22]
[PHP ver7.1.7]
[Laravel ver5.5.42]

1.症状

Mysqlにデータをinsertしようとした際

SQLSTATE[HY000]: General error: 1364 Field 'カラム名'
doesn't have a default value (SQL: insert into `〇〇` (`updated_at`, `created_at`)
values...(以下略)

との表示が。。
今まで見たことないし、今までとinsertの際異なることと言ったら、別管理で使うgroup_idを持たせたくらい??

+----+----------+-----------------------+---------------------+---------------------+
| id | group_id | name                  | created_at          | updated_at          |
+----+----------+-----------------------+---------------------+---------------------+
|  1 |        0 | name1                 | 2018-01-05 23:59:59 | 2018-01-09 23:59:59 |
|  2 |        0 | name2                 | 2018-02-07 00:00:00 | 2018-02-09 00:00:00 |
|  3 |        0 | name3                 | 2018-08-21 21:26:04 | 2018-08-21 21:26:04 |
|  4 |        0 | name4                 | 2018-08-21 21:26:08 | 2018-08-21 21:26:08 |
+----+----------+-----------------------+---------------------+---------------------+

2.原因・対策

原因はStrictModeでした。
このモードがtrueであるとInsertやUpdate時に不正な値が入らないよう制限をかけてくれるようです。
こちらは簡単にfalseにできて

/config/database.php
'mysql' => [
            'strict' => false
           ]

これで完結です。
私の場合Request内にgroup_idの値が入っていなかったため、
値入ってないカラムがあるから処理できないでー😅
ということでエラーが出たようです。
古いパージョンのMySQLではデフォルト設定でないようなのでバージョンを上げたことにStrictModeが原因でうまく動作しなくなってしまうケースもあるようです。💦

私はこれで改善したのですが、一応改善しない場合のためもう一パターン載せておきます。

3.SQLモード

MySQLにおいて無効な値が入力された場合エラーをだすか、有効な値にして入力するかの設定をになっているのがSQLモード
です。
ONLY_FULL_GROUP_BYや
STRICT_TRANS_TABLESなど
デフォルトで設定が為されています。
詳しい仕様はググっていただけると😀

SQLモードに関してはMySQL内で

SET GLOBAL sql_mode="〇〇";

で設定可能であるので
ここの値をいじって改善する場合もあるそうなので是非確認していただけるとよいかもです。

16
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
12