MySQL5.6のSQLモード
ついに出ましたね、MySQL5.6!
my.cnfの位置が/usr/my.cnfに変わったとか標準動作がinnodb_per_tableになったとか色々ありますが、とりあえずデフォルトのmy.cnf内に
という記述があって、詳細はこちらを見ていただくとして、今まではsql_mode=TRADITIONALだったのですが、このまま起動するとSTRICT_TRANS_TABLESモードで起動してしまいます。sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
TRADITIONALはカラムレングスよりも長い文字列のレコードがインサートされた場合、カラムに入らない部分を切り捨てて格納し、エラーメッセージを返すんですが、STRICT_TRANS_TABLESだとインサートエラーを返します。
WEBアプリでレングスチェックをしているのでMySQL側でチェックする必要ないよ、という人はTRADITIONALモードに変更しましょう。
TRADITIONALモードで起動した場合、余計チェックが厳しくなりました><
5.6はTRADITIONALモードも変更が入ってるらしい。。。
mysql> select @@global.sql_mode;
- ------------------------------------------------------------------------------------------------------------------------------------------------------+
@@global.sql_mode
- ------------------------------------------------------------------------------------------------------------------------------------------------------+
STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
- ------------------------------------------------------------------------------------------------------------------------------------------------------+