SOFTELメモ

</> 技術者募集

MySQL5.6は設定のデフォルト値が5.5と違う

問題

MySQL5.6を使ってみたんだけど、SQLですごいたくさんエラーが出るよ?

ERROR 1364 (HY000): Field 'xxxxxxxx' doesn't have a default value

mysql

答え

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 になっている。

関連するメモ

コメント