MySQL5.6のsql_mode

型の変換を厳密にしておかないと、MySQL5.6でエラーになる。
これはアプリケーションの問題であり、型変換の厳密性に欠けた弊害であろう。
TIMESTAMPとDATETIMEの型変換で「Incorrect datetime value」が発生する。
原因はsql_modeに「STRICT_TRANS_TABLES」が指定されているからだ。
MySQL5.6以前では、sql_modeのデフォルトにSTRICT_TRANS_TABLESが指定されていなかったため、見逃されていた訳だ。

対策はMy.cnfのsql_modeから以下のようにSTRICT_TRANS_TABLESを外せばよい。

#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
sql_mode=NO_ENGINE_SUBSTITUTION

ところがWindows版ではこれが見当たらない。
わからなかったので、MySQLのWorkbenchでQueryから以下のように変更した。

SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';

確認は以下の通り。

SELECT @@GLOBAL.sql_mode;

これで「NO_ENGINE_SUBSTITUTION」が表示されればOKだ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です