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にアップデートしないほうがいいのかな。

 

---

おすすめサービス