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
これにより、標準の設定が上書きされます。サーバーを再起動しましょう。