BCPを使用して、ローダー制御ファイルを使用してnvarcharフィールドを含むSQLServer2005テーブルにロードしたいと思います。私が理解しているように、SQL Server 2005はUTF-16のみをサポートしています(UTF-16 LEだと思います)。ファイルはJavaプログラムによって出力されています。私が現在設定している方法は次のとおりです。
XML形式のBCPローダーファイル(次のコマンドを使用して作成されます
bcp test_table format nul -c -x -T -f test_table.xml -S server
:)次のコードを使用して出力を書き込むJavaプログラム:
File f = new File("from_java.txt"); String encoding = "x-UTF-16LE-BOM"; OutputStream os = new FileOutputStream(f); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(os, encoding); String theString = "áááááLittle Endian, BOM\r\n"; outputStreamWriter.append(theString); outputStreamWriter.flush(); outputStreamWriter.close();
次に、次のbcpコマンドを使用します。
bcp test_table in from_java.txt -T -f test_table.xml -S server -error error.txt
私がテーブルに入れるのはですÿþá
。ではなくáááááLittle Endian, BOM
パラメータを変更するいくつかの異なる順列を試しました。
- ローダー制御ファイルの生成方法を変更します(文字データの場合は-cではなくネイティブデータの場合は-nを使用します...これは何か関係があると思いますが、挿入されたデータに改善は見られませんでした)
- ビッグエンディアンとBOMのないリトルエンディアンを含むUTF-16エンコーディングのいくつかの異なる形式を試しましたが、役に立ちませんでした
- MicrosoftがBOM情報を利用したいということをどこかで読んだので、ファイルにBOMを手動で出力しようとしました。
- ファイルを(UTF-16ではなく)UCS-2として出力しようとすることを検討しました。これは、(明らかに)BCPが実際にファイルを読み込んでいるものです。
- bcpインポートで-wを試しましたが、これは機能しますが、ローダー形式のファイルと組み合わせることはできません(ファイルがUTF-16でエンコードされていることをBCPに伝える魔法を形式ファイルに組み込む方法はありますか?)
- Windows-1252でファイルを出力し、ファイル
-c 1252
をロードするときにbcpのオプションとしてそのコードページを指定すると、動作させることができます(ただし、UTF-16のように情報が失われるため、これは実行したくありません。 1252と比較して表現できるもののスーパーセット)
ローダー形式の構成ファイルと組み合わせてUTF-16データを使用してbcpをnvarcharフィールドにロードすることに成功した人はいますか?
前もって感謝します、
-ジェームズ