Как написать символы UTF-8, используя массовую вставку в SQL Server? - PullRequest
18 голосов
/ 31 марта 2011

Я делаю BULK INSERT в sqlserver, и он не вставляет символы UTF-8 в базу данных должным образом. Файл данных содержит эти символы, но строки базы данных содержат символы мусора после массового выполнения вставки.

Моим первым подозреваемым была последняя строка файла формата:

10.0
3
1 SQLCHAR  0  0  "{|}"  1 INSTANCEID ""
2 SQLCHAR  0  0  "{|}"  2 PROPERTYID ""
3 SQLCHAR  0  0  "[|]"  3 CONTENTTEXT "SQL_Latin1_General_CP1_CI_AS"

Но после прочтения этой официальной страницы мне кажется, что на самом деле это ошибка чтения файла данных с помощью операции вставки в SQL Server версии 2008. Мы используем версию 2008 R2.

Каково решение этой проблемы или хотя бы обходной путь?

Ответы [ 12 ]

0 голосов
/ 21 мая 2015

Мои экспортированные данные в формате TSV из БД с кодировкой Latin-1.

Это легко проверить: SELECT DATABASEPROPERTYEX('DB', 'Collation') SQLCollation;

Извлечь файл в формате UTF-8.

BULK INSERT не работает с UTF-8, поэтому я конвертирую UTF-8 в ISO-8859-1 (он же Latin-1) с помощью простого скрипта Clojure:

(spit ".\\dump\\file1.txt" (slurp ".\\dump\\file1_utf8.txt" :encoding "UTF-8") :encoding "ISO-8859-1")

Выполнить - исправить пути и java.exe -cp clojure-1.6.0.jar clojure.main utf8_to_Latin1.clj

0 голосов
/ 27 января 2015

Мне удалось сделать это, используя SSIS и назначение ADO NET вместо OLEDB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...