Думаю, я бы добавил свои мысли к этому. Мы пытались загрузить данные в SqlServer с помощью bcp, и у нас было много проблем.
bcp в большинстве версий не поддерживает файлы UTF-8 любого типа. Мы обнаружили, что UTF-16 будет работать, но он сложнее, чем показано в этих сообщениях.
Используя Java, мы написали файл, используя этот код:
PrintStream fileStream = new PrintStream(NEW_TABLE_DATA_FOLDER + fileName, "x-UTF-16LE-BOM");
Это дало нам правильные данные для вставки.
Мы пытались использовать только UTF16 и продолжали получать ошибки EOF. Это потому, что мы пропустили спецификацию файла. Из Википедии:
UTF-16, спецификация (U + FEFF) может быть помещена как первый символ файла или символьного потока, чтобы указать порядковый номер (порядок байтов) всех 16-битных кодовых единиц файла или потока.
Если этих байтов нет, файл не будет работать. Итак, у нас есть файл, но есть еще один секрет, который необходимо раскрыть. При построении командной строки вы должны включить -w, чтобы сообщить bcp, какой это тип данных. При использовании только английских данных, вы можете использовать -c (символ). Так это будет выглядеть примерно так:
bcp dbo.blah в C: \ Users \ blah \ Desktop \ events \ blah.txt -S tcp: databaseurl, someport -d thedatabase -U username -P пароль -w
Когда все это сделано, вы получаете приятные на вид данные!