LoginSignup
42
33

More than 3 years have passed since last update.

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

Posted at

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

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

42
33
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
42
33