SQL Server の bcp についてのメモを少し残しておきたいと思います。
SQL Server の bcp ですが UTF-8 の形式を使用したインポートがサポートされていません。
# エクスポートはできそうですが。
bcp ユーティリティ に以下のように記載されています。
SQL Server はコード ページ 65001 (UTF-8 エンコード) をサポートしません。
bcp で -w を指定した場合、Unicode 文字となりますがこの場合は UTF-16LE が使用されます。
以下は Unix 向けの BCP についての情報になりますがこのあたりのことが記載されていますね。
[Linux] BCP で 2GB 以上のサイズのファイルをインポートするには
bcp による接続
UTF-8 で出力されたファイルを読み込むときには、テキストエディタで一度変換するまたは SSIS やデータインポート / エクスポートウィザードを使用する必要が出てきます。
これらのツールであれば UTF-8 のテキストをデータソースとしてインポートすることができます。
# データ型を合わせる手間が少しかかりますが。
また、改行コードについても注意が必要となってきます。
デフォルトでは n が指定されていますが、CR/LF や LF を使用する必要も出てくるかと思います。
bcp では、-r オプションを使用することで改行文字を指定することができます。
-r では n, r (CR/LF) を使用することができますが、LF の短縮のオプションは用意されていません。
LF を指定したい場合には -r 0x0A というように文字コードを指定する必要が出てきます。
SSIS 等のツールでれば改行コードをプルダウンで選択することができますので、このあたりも柔軟に容易に設定することができます。
bcp では "" (ダブルクォート) 区切りのフラットファイルをロードするときは、フォーマットファイルを使用して設定するという手間もかかります。
# データ内に改行コードが含まれる場合は文字列修飾が必須になってきますので。
SSIS 等のツールに関してはこのあたりの修飾も容易に指定することができます。
Shift-JIS (SJIS) でエクスポートできる場合は、bcp で簡単にインポートができるのですが Unicode で UTF-8 でしか出力できない場合には、ひと手間かけないと厳しそうですね。
Unicode 文字列を使用していても SJIS で対応できる文字であれば、SJIS で出力してしまえばよいのですが、そうでない場合は悩ましいです…。
Unicode 対応に関しては以下も目を通しておくとよさそうですね。
Unicode 文字形式を使用したデータのインポートまたはエクスポート (SQL Server)