質問: ### (はじめに) 抽象的な質問で申し訳ございません。 もっと具体的説明が必要な点などございましたら、適宜補足いたしますのでよろしくお願いいたします。 ■質問 --- CSVのwiki には、 > > CSV形式の細部の実装はソフトウェアによって異なるため(例えば項目を単一引用符' 'や二重引用符" "で括ったり、ファイルの一行目をヘッダとして予約したりなど)、他のソフトウェアで表(テーブル)として読み込む際に互換性で問題が出る場合がある > > > とありますが、 * CSVファイルを生成する際、またはMySQLにCSVをLOAD DATA文でインポートする際のベストプラクティスなどはありますでしょうか? * シングルクォーテーション、ダブルクォーテーションによる括りの有無で長所短所などはありますでしょうか? * そもそも括り記号はどういったケースで有用でしょうか? ■現状 --- "数値型データ", "日付型データ", "文字列型データ", みたいな構造でとりあえず、ダブルクォーテーションで括ってCSVデータを生成しLOAD DATA文でMySQLにインポートしていますが、そもそもこれら括り記号は不要なのではないかな?と思い始めています。 どうぞよろしくお願い申し上げます。
回答: > > ・CSVファイルを生成する際、またはMySQLにCSVをLOAD DATA文でインポートする際のベストプラクティスなどはありますでしょうか? > > > #ベストプラクティスかどうかは別として注意点。 ・タブや改行の扱い GUIではタブは項目間の移動に使用される事が多く、単項目の入力でキーボードの入力によりタブが含まれる事は無いが、コピー&ペーストでは含まれるので考慮は必要。 項目内の改行はある事を前提にした方が良い。 ・Nullの扱い LOAD DATAではNull文字の指定は可能ですが、一旦全て文字列属性の一時テーブルで受け取ってから処理する方が楽。 データの取込が外部とのインターフェースなどが目的なら、チェック目的としても使用できますので。 > > ・シングルクォーテーション、ダブルクォーテーションによる括りの有無で長所短所などはありますでしょうか? > > ・そもそも括り記号はどういったケースで有用でしょうか? > > > CSVやTSVで使用される制御コード(項目区切り,行区切り)=(,や改行)と同じコードが項目内に含まれるときの為に、括り記号は必須と考えた方が無難です。