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

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