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 」を実行したら、無事に読み込まれました。

コメント

タイトルとURLをコピーしました