MySQL で CSV 出力する方法比較

MySQLCSV 出力する方法として、3つ考えた。
NULL を含む場合の挙動について面白いと思ったのでメモ。
きちんと NULL 判定すればよいだけだけど、うっかり忘れるとこんな挙動になる。

CONCAT_WS でセパレータを指定

SELECT CONCAT_WS(',', A, B, C) FROM TEST;

=> NULL 値が飛ばされた。

1,2,3
1,3
2,3

確かに

CONCAT_WS() は空のストリングをとばしません。しかし、セパレータ引数のあとの NULL 値はすべてとばします。

と書いてある。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.5 文字列関数

CONCAT で セパレータも含めて指定する

SELECT CONCAT(A, ',', B, ',', C) FROM TEST;

=> NULL を含む行は、NULL と出力される

1,2,3
NULL
NULL

ファイル出力する

SELECT A, B, C INTO OUTFILE './TEST.txt'
FIELDS TERMINATED BY ','
FROM TEST;

=> NULL の項目が\Nと出力された

1,2
1,\N