MySQLのLOAD DATAで空白の代わりにnullをセットしたい。
CSVを高速にインポートするLOAD DATA INFILEコマンド。
そのロード時にブランク(空白)が入るのを避ける方法を紹介する。
LOAD DATAコマンドとは
LOAD DATA INFILE
コマンドはCSVファイルなどのテキストファイルの内容を、高速にMySQLのテーブルに取り込むコマンドである。
LOAD DATA INFILE ステートメントは、非常に高速にテキストファイルからテーブルに行を読み取ります。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.6 LOAD DATA INFILE 構文
通常はブランク(空白)がセットされる
ロードする際、CSVの中に何も無い空白のセルがあると、nullではなくブランク(空白)として取り込まれる。
以前記事に書いたように空白とnullは判定条件がややこしいので混在させない方が良い。
-
MySQLで空文字(空白、ブランク)カラムを置換する
ブランク(空白)の代わりにnullをセットする方法
ブランク(空白)の代わりにnullをセットするには nullif
を使う。
SQL文で利用できる関数はLOAD DATA INFILEコマンドでも有効なので、 nullif
で空白をnullに置換してしまえば空白の代わりにnullを挿入できる。
LOAD DATA INFILE "ファイルパス" INTO TABLE テーブル名 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE (@csv_col1, @csv_col2, @csv_col3) SET table_col1 = nullif(@csv_col1,""), table_col2 = nullif(@csv_col2,""), table_col3 = nullif(@csv_col3,"") ;
参考:
MySQLのload dataで日付型にnullをセットする - 文系プログラマによるTIPSブログ
まとめ
- MySQLのLOAD DATAで空白の代わりにnullをセットするには
nullif
を使う