MySQL5.6は設定のデフォルト値が5.5と違う
問題
MySQL5.6を使ってみたんだけど、SQLですごいたくさんエラーが出るよ?
ERROR 1364 (HY000): Field 'xxxxxxxx' doesn't have a default value
答え
MySQL5.6をrpmでインストールすると、初期状態で sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
と設定され、何らかの設定をしないとMySQL5.5以前とはsql_modeが異なる状態となった。
- NO_ENGINE_SUBSTITUTION
-
デフォルトのストレージ エンジンの自動置換 (substitution) を防ぐ。これは、CREATE TABLE のようなステートメントが、無効化した、またはコンパイルしたストレージ エンジンを指定するときのこと。エラーで知らせる。
- STRICT_TRANS_TABLES
-
指定された値をトランザクション テーブルに挿入できない場合、クエリの実行を中断する。非トランザクション テーブルでは、値が 1 行ステートメントの場合、または複数行ステートメントの最初の行である場合に、クエリを中断する。
STRICT_TRANS_TABLESが有効だと、NOT NULL で デフォルト値が設定されていないカラムに、NULLを登録、もしくは値を指定しないでレコードを挿入しようとすると、デフォルト値がないとのエラーになったりする。
5.5以前と同じ動きをさせるには
sql_mode=NO_ENGINE_SUBSTITUTION
もしくは
sql_mode=""
と設定する。
設定ファイルの場所も、/etc/my.cnf ではなくて /usr/my.cnf になっている。
コメント