型の変換を厳密にしておかないと、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だ。