CSV から null をロード
【環境】
MySQL: 5.7.18
phpMyAdmin: 4.7.6
MySQL: 5.7.18
phpMyAdmin: 4.7.6
経緯
phpMyAdmin
CSV からデータをロードしようとしたら
エラー
#1292 – Incorrect datetime value: ‘null’ for column ‘hoge’ at row 1
#1292 – Incorrect datetime value: ‘null’ for column ‘hoge’ at row 1
というエラーが出た。
CSV の中身を見ると、当該カラムの値は “null” となっている。
CLI
MySQL の CLI から入れようとしたら Warning が出た。
気持ち悪いので、なんとかしてみようと思った。
データ型
ちなみに対象カラムのデータ型は DATETIME。
手法1
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');
このように書いてみたけど、上手く行かなかった。
その後
すぐ諦めたので、何が悪いのか、そもそもこの書き方が正しいのかすら不明。
手法2
null のカラムの CSV 値を “\N” とする手法。
これもどこかに書いてあったのを見かけた記憶があったので試してみたところ、
なんと、上手くいった♪
Excel のセルに \N とそのまま記述して
CSV では、”\N” となるように吐き出したところ
OK だった。