Искам да използвам 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 кодиране, включително big endian и little endian без BOM, без резултат
- опитах да изведа BOM ръчно във файла, тъй като прочетох някъде, че Microsoft наистина иска да използва информацията за BOM
- разгледа опит да изведе файла като UCS-2 (вместо UTF-16), тъй като това е (очевидно) това, в което BCP всъщност чете файла като
- опитах -w при импортиране на bcp, това наистина работи, но не и във връзка с файл с формат на зареждащото средство (има ли начин да се включи каквато и да е магия, която казва на BCP, че файлът е кодиран в UTF-16 във файла с формат?)
- Мога да го накарам да работи, ако изведа файла в windows-1252 и посоча тази кодова страница като
-c 1252
опция за bcp, когато зареждам файла (но не искам да правя това, тъй като ще загубя информация като UTF-16 е надмножество на това, което може да бъде представено в сравнение с 1252)
Някой успял ли е да накара bcp да се зареди в поле nvarchar, използвайки UTF-16 данни във връзка с конфигурационен файл на формат за зареждане?
Благодаря предварително,
-Джеймс