Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
9
Help us understand the problem. What is going on with this article?
@yuzgit

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

More than 1 year has passed since last update.

環境
[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="〇〇";

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

9
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
yuzgit
事業開発を生業としています🔥 好きな技術はVue/Laravel/AWS 最近はGoにもチャレンジ中です
donbler
プログラミング学習レッスンプラットフォームDonbler(ドンブラー)を開発・運営しています

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
9
Help us understand the problem. What is going on with this article?