Help us understand the problem. What is going on with this article?

MySQLで “xxx doesn’t have a default value”とエラーが表示されたときの対処法

MySQLで値を挿入する際、次のようなエラーが発生することがあります。

SQLSTATE[HY000]: General error: 1364 Field ‘xxxx’ doesn’t have a default value

これは、挿入しようとしているテーブルのあるフィールドについて、値が指定されていない場合に発生します。MySQL 5.6以前のバージョンであれば問題なかったのですが、5.6から設定が一部変更されました。対処法を紹介しましょう。

SQLで値を指定する

このエラーメッセージは、値を指定すべきカラムに指定されていないことが問題であるため、SQL内で空の値などを指定することで回避することができます。

INSERT INTO xxx SET name=’abc’;
↓
INSERT INTO xxx SET name=’abc’, cnt=0;

※ cntカラムでエラーが発生している場合

STRICT_TRANS_TABLESを外す

対処としては、「STRICT_TRANS_TABLES」という設定を変えることになります。MySQLの設定ファイル(my.cnf)を書き換えましょう。

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
↓
sql_mode=NO_ENGINE_SUBSTITUTION

こうして、データベースを再起動すれば設定が有効になります。

XAMPPでの my.cnfの変更方法

XAMPPを利用している場合、my.cnfファイルはコントロールパネルから編集することができます。図のボタンをクリックし、「my.cnf」をクリックしましょう。

ただし、XAMPP 7.2に同梱されているデータベースは MariaDB(MySQLと互換性のある別製品)であるため、この問題の対象ではありません。

MAMPでの my.cnfの変更方法

MAMPを利用している場合は、以下に設定ファイルが存在しています。

アプリケーション→MAMP→conf→my.cnf

ただし、最初はファイル自体が存在しないため、その場合は新しくファイルを作成し、以下の一文を追加しましょう。

[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION

これにより、標準の設定が上書きされます。サーバーを再起動しましょう。

Why do not you register as a user and use Qiita more conveniently?
  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
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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