All posts
MySQLにダンプデータをLOAD DATA INFILEしようとしたら、Incorrect datetime valueエラーを吐くので対処した

MySQLにダンプデータを流し込んだところ、Incorrect datetime valueというエラーが出力されました。 昨年書いたプログラムなのですが、以前は問題なく実行できていたので、きっとMySQLのバージョン違いによる問題だろうと当たりをつけて調べてみたら、案の定そんな感じでした。
sql_nodeの設定に「STRICT_TRANS_TABLES」が標準で追加されたことにより、フィールドの型のチェックが厳しくなっていたのでした。
今回は、「LOAD DATA INFILE」する前に、「SET SESSION sql_mode = '設定値'」することにしました。このSQLを実行することで、MySQLのsql_modeをそのセッションに関してのみ変更することができます。
まずは以下のSQLを実行して、現在の設定を書き出します。
SHOW VARIABLES LIKE 'sql_mode';例えば、こんな感じに表示されます。
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIONこの中から「STRICT_TRANS_TABLES」の部分を削除した値をsql_modeにセットします。
SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';この後に「 LOAD DATA INFILE 」を実行したら、無事に読み込まれました。




Discussion