2014-02-03 2 views
2

Итак, я решил, что это удовольствие от чтения текстового файла и хранения содержимого в NVARCHAR с использованием TSQL и Microsoft SQL Server Management Studio 2008 R2. Я нашел пример для этого в https://www.simple-talk.com/sql/t-sql-programming/the-tsql-of-text-files/Чтение TSQL из файла в ошибку varchar/nvarhar

Так что я попытался это с моим ABC.txt файл и его содержимое:


АБВГДЕЖЗИКЛМНОПРСТУФХЧШЭЮЯ

АБВГДЕЖЗИКЛМНОПРСТУФХЧШЭЮЯ


Когда я первый пытался хранить содержимое этого файла в @myString Я использовал этот код:

declare @myString nvarchar(max); 

Select @myString = BulkColumn 
from OPENROWSET(Bulk 'C:\Users\<myComputer'sNameHere>\Documents\How2\FilesForTestingStuff\ABC.txt', SINGLE_BLOB) as x 
print @myString; 

Я получил это как мой выход, когда я печатал строку:

䉁 䑃 䙅 䡇 䩉 䱋乍 偏 剑 呓 噕 塗 婙 ਍ 扡 摣 晥 桧 橩 汫 湭 灯 牱 瑳 癵 硷 穹


Я тя nged nvarchar - varchar, и я получил правильное содержимое файла.

Кто-нибудь знает, почему это произошло? Я не думал, что есть разница в конверсии, отличная от nvarchar, имеет больше свободного места, чем varchar и способна удерживать символы юникода.
Как вы обычно пытаетесь читать из файла и вставлять содержимое в nvarchar?

ответ

3

Я полагаю, это зависит от кодировки входного файла.

Вы использовали SINGLEBLOB, и в соответствии с MSDN он возвращает данные как varbinary(MAX). Вероятно, ваш файл был сохранен с использованием кодировки, отличной от юникода, поэтому, когда она была импортирована в столбец nvarchar, SQL интерпретировал ее неправильно. Изменение корректного чтения допустимых символов. Попробуйте кодировать файл с помощью UTF-16 и попытаться импортировать данные в переменную nvarchar (MAX).

Update

Я пытался воссоздать проблему, которую вы описали. Я сохранил текстовый файл с кодировкой ANSI, запустил сценарий импорта и получил результат, аналогичный тому, который вы опубликовали в своем вопросе. Затем я преобразовал файл в UCS-2 Маленький Endian кодировка и после запуска скрипта я получил правильный вывод.

Подводя итог, если Вы хотите использовать импортирование с SINGLEBLOB вариант, просто преобразовать файл с данными для использования UCS-2 Little Endian кодирование и оно должно корректно работать с nvarchar типа SQL.

Справочные ссылки:

+0

Ok Я понимаю причину файла часть, но я не знаю, как проверить кодировку файла, и я не могу найти TSQL примеры преобразования файлов. – user3003304

+0

Вы можете использовать текстовый редактор для проверки кодировки файла. Вы также можете сохранить файл с соответствующей кодировкой, используя * SQL Server Management Studio *. Просто нажмите кнопку, чтобы создать новый файл сценария, введите данные, нажмите «Сохранить как ...», затем нажмите небольшую стрелку рядом с кнопкой «Сохранить» и выберите «Сохранить с кодировкой ...». Из списка * Кодировка * выберите *** Юникод (1200) *** и сохраните файл. –

+0

@ user3003304 - вы можете оказаться полезными: http://www.joelonsoftware.com/articles/Unicode.html. Чтобы просмотреть кодировку файла, вы можете использовать шестнадцатеричный редактор, например. Visual Studio имеет один встроенный или мне нравится использовать: «xvi32». –

Смежные вопросы