Я хочу использовать BCP для загрузки в таблицу SQL Server 2005 с полем nvarchar с использованием файла управления загрузчиком. Насколько я понимаю, SQL Server 2005 поддерживает только UTF-16 (и я считаю, что это UTF-16 LE). Файл выводится программой Java. В настоящее время я настроил его следующим образом:
Файл загрузчика BCP в формате XML (создается с помощью следующей команды:
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
Я пробовал несколько разных вариантов изменения параметров:
- изменение способа создания файла управления загрузчиком (использование -n для собственных данных вместо -c для символьных данных ... Я думаю, что это может иметь какое-то отношение к этому, но я не заметил никаких улучшений во вставленных данных)
- пробовал несколько разных форм кодировки UTF-16, включая прямой порядок байтов и прямой порядок байтов без спецификации, безрезультатно
- пытался вывести спецификацию вручную в файл, поскольку я где-то читал, что Microsoft действительно любит использовать информацию о спецификации
- рассмотрел попытку вывести файл как UCS-2 (вместо UTF-16), поскольку это (по-видимому) то, что BCP на самом деле читает файл как
- попробовал -w для импорта bcp, это работает, но не в сочетании с файлом формата загрузчика (есть ли способ включить магию, сообщающую BCP, что файл закодирован в UTF-16 в файл формата?)
- Я могу заставить его работать, если я выведу файл в windows-1252 и укажу эту кодовую страницу как параметр
-c 1252
для bcp при загрузке файла (но я не хочу этого делать, так как я буду терять информацию как UTF-16 это надмножество того, что можно представить по сравнению с 1252)
Кому-нибудь удалось заставить bcp загрузить в поле nvarchar с использованием данных UTF-16 в сочетании с файлом конфигурации формата загрузчика?
Заранее спасибо,
-Джеймс