CSV から null をロード
MySQL: 5.7.18
phpMyAdmin: 4.7.6
CSV からデータをロードしようとしたら
#1292 – Incorrect datetime value: ‘null’ for column ‘hoge’ at row 1
というエラーが出た。
CSV の中身を見ると、当該カラムの値は “null” となっている。
MySQL の CLI から入れようとしたら Warning が出た。
気持ち悪いので、なんとかしてみようと思った。
ちなみに対象カラムのデータ型は DATETIME。
LOAD DATA LOCAL INFILE '/path/to/csv_file.csv' INTO TABLE hoge FIELDS TERMINATED BY ',' ENCLOSED BY '"' SET deleted = nullif(deleted, '0000-00-00 00:00:00');
どこで見たか忘れてしまったけど
こういうやり方があるらしい。
以前試したときは上手くいった。
ただ今回は、複数カラムが対象で
LOAD DATA LOCAL INFILE '/path/to/csv_file.csv' INTO TABLE hoge FIELDS TERMINATED BY ',' ENCLOSED BY '"' SET registered = nullif(deleted, '0000-00-00 00:00:00'), deleted = nullif(deleted, '0000-00-00 00:00:00');
このように書いてみたけど、上手く行かなかった。
すぐ諦めたので、何が悪いのか、そもそもこの書き方が正しいのかすら不明。
null のカラムの CSV 値を “\N” とする手法。
これもどこかに書いてあったのを見かけた記憶があったので試してみたところ、
なんと、上手くいった♪
Excel のセルに \N とそのまま記述して
CSV では、”\N” となるように吐き出したところ
OK だった。