MySQL 5.6 で「General error: 1364 Field ‘xxx’ doesn’t have a default value」が出る問題の解決方法

問題

MySQL 5.6 の環境で insert ステートメントを実行しようとしたら、下記のエラーメッセージが表示され、実行されませんでした。
※Windows 7 の環境で利用

General error: 1364 Field 'xxx' doesn't have a default value」

この「xxx」フィールド(列)は、INT 型で、NOT NULL 制約と AUTOINCREMENT 属性を付けてあります。

原因

調べてみたところ、このエラーは MySQL 5.6 からの仕様でした。

NOT NULL 制約を付けたフィールドに AUTOINCREMENT 属性を同時に設定すると、何かしらのデフォルト値を指定しなければならないようです。

解決方法

対処方法としては2つ。

フィールドの NOT NULL 制約を外すか、MySQL の STRICT MODE をオフにする方法です。

フィールドの NOT NULL 制約を外す

NOT NULL 制約と AUTOINCREMENT 属性が同時に指定された場合に厳密にチェックされるという動作なので、どちらかを外せば OK です。
ですが、通常やりたい事は自動付番の方が優先順位が高いと思いますので、NOT NULL を外すことで対処しています(NULL が1件だけ入る可能性があるということですね)。

次の SQL を実行します。

ALTER TABLE <テーブル名> ALTER COLUMN <カラム名> DROP NOT NULL;

MySQL の STRICT MODE をオフにする方法

厳密にチェックさせないように MySQL の構成を設定(STRICT MODE をオフにする)して解決する方法です。

my.cnf(もしくは my.ini) 内の下記の行から STRICT_TRANS_TABLES を外します。
※「C:\Program Files\MySQL\MySQL Server 5.5\」などにあります

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

↓(変更例)

sql_mode=NO_ENGINE_SUBSTITUTION

まとめ

バージョンごとの違いをすべてあらかじめ吸収するのは難しいですが、この件はすぐに気づけませんでした・・
誰かの参考になれば。

10年集客し続けられるサイトを、ワードプレスで自作する9つのポイント プレゼント

【最後まで読んでくれたあなたに】

あなたは、24時間365日、自分の代わりに集客し続けてくれるWebサイトを作りたい!と思ったことはありませんか?

私はこれまで500以上のWebサイトの構築と運営のご相談に乗ってきましたが、Webサイトを作ってもうまく集客できない人には、ある一つの特徴があります。

それは、「先を見越してサイトを構築していないこと」です。
Webサイトで集客するためには、構築ではなく「どう運用するか」が重要です。

しかし、重要なポイントを知らずにサイトを自分で構築したり、業者に頼んで作ってもらってしまうと、あとから全く集客に向いていないサイトになっていたということがよく起こります。

そこで今回、期間限定で
『10年集客し続けられるサイトをワードプレスで自作する9つのポイント』
について、過去に相談に乗ってきた具体的な失敗事例と成功事例を元にしてお伝えします。

・ワードプレスを使いこなせるコツを知りたい!
・自分にピッタリのサーバーを撰びたい!
・無料ブログとの違いを知りたい!
・あとで悔しくならない初期設定をしておきたい!
・プラグイン選びの方法を知っておきたい!
・SEO対策をワードプレスで行うポイントを知りたい!
・自分でデザインできる方法を知りたい!

という方は今すぐ無料でダウンロードしてください。

期間限定で、無料公開しています。

※登録後に表示される利用条件に沿ってご利用ください

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です