MySQL5.5からMySQL5.6にアップデートでSQL文がエラーになった場合の対処法
MySQL5.5からMySQL5.6にアップデートしたらSQLでエラーが出るようになったのでその対処法をメモしておきます。
エラーになる原因は、sql_modeのデフォルト設定がMySQL5.5と5.6で異なる事が原因です。
SQL モード
http://dev.mysql.com/doc/refman/5.1/ja/server-sql-mode.html
・MySQL5.5
mysql> SELECT @@GLOBAL.sql_mode; +-------------------+ | @@GLOBAL.sql_mode | +-------------------+ | | +-------------------+ 1 row in set (0.00 sec)
・MySQL5.6
mysql> SELECT @@GLOBAL.sql_mode; +--------------------------------------------+ | @@GLOBAL.sql_mode | +--------------------------------------------+ | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | +--------------------------------------------+ 1 row in set (0.00 sec)
MySQL5.5まではsql_modeはデフォルトで空だったんですが、MySQL5.6では、「sql_mode=STRICT_TRANS_TABLE」が指定されています。
このため、MySQL5.5では、ワーニングが返ってくるだけで読み飛ばされていたクエリーが、MySQL5.6では、ワーニングではなくエラーになりクエリーが中断されてしまいます。
■対処法
MySQL5.6でクエリーを中断させないようにするには、my.cnfのsql_modeの値を空に変更します。
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES ↓ sql_mode=''
MySQL5.6で新規にサービスをつくる場合は、 デフォルト設定のまま(「sql_mode=STRICT_TRANS_TABLE」)で開発するのがいいと思いますが、既存サービスの場合は、MySQL5.5から5.6にアップデートしないほうがいいのかな。
---
おすすめサービス