2006.12.03

CSVのテキスト修飾子と列区切り記号は何がいいか。

「テーブル単位でデータの退避を取る」ということは
特に各テスト工程ではありがちな作業ですが、
みなさんはどのようにデータの退避を取っていますか?

仮のテーブルを作成したり、テスト用のDBにデータを移したり…と、
いくつも方法はあります。
その中でも、私の場合は「CSVにデータを落とす」ことが多いです。
やはり、データの管理が楽ですので。

しかし、「CSVにデータを落とす」場合には
CSVの弱点を理解しておかないと
後でデータを戻した際に、痛い目を見る可能性があります。

一般的にCSVと言えば、テキスト修飾子がダブルクォーテーションで
カンマ区切りのデータが多いように感じます。

ただ、その組み合わせだと、
NULLのデータがCSVファイル上では「""」となってしまい、
データを戻した際に、NULLではなく
空文字になってしまいます(とりあえずSQL Serverの場合)。

これは困りますね。
例えば、SQL文のWHERE句で「○○ IS NULL」と記述していたとしたら
データを戻す前はTRUEとなっていたのに
FALSEになってしまいます。

そこで、NULLをNULLのままデータを戻す方法が
『テキスト修飾子が「なし」』となります。
その場合、カンマを区切り文字にすると
データの中カンマが含まれていた場合にデータがきちんと戻せません。
区切り文字は、カンマよりもタブの方がそのリスクが低くなるでしょう。

私は、テキスト修飾子が「なし」でタブ区切りと決めています。
これでNULLがNULLでなくなる問題を回避しています。
(もちろんデータにタブがないことが分かっているのが前提です。)

いろいろ書きましたが…
もちろん、データ上にNULLと空文字が混在する場合には使えません。
その場合は、別の方法でデータの退避を取るしかありません。

photo
admin