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 」を実行したら、無事に読み込まれました。
ホームページの制作(デザイン・コーディング・プログラミング)に加え、ネットショップの販売促進に関するアドバイスも致します。 20年以上に渡って実際にネットショップを運営した経験を生かし、聞きかじりではない実績を伴ったノウハウを、自分の言葉でお伝えいたします。 プログラミングの経験は30年以上。HTML、CSS、JavaScript、TypeScript、Vue、NuxtJS、Node.js、MySQL、MongoDB、Elasticsearch、WordPress、PHP、Docker、Electronなど、幅広く対応します。
コメント