Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 OpenRowSet неверная кодировка  [new]
Santa89
Member

Откуда:
Сообщений: 1471
Всем привет, есть txt-файлик с JSON'ом с русским текстом.
Смысла вставлять запрос нет поэтому приложу скриншот с проблемой.
Как это можно исправить?

К сообщению приложен файл. Размер - 11Kb
7 сен 17, 12:43    [20778261]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet неверная кодировка  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 774
Santa89,
NVARCHAR?
7 сен 17, 13:03    [20778359]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet неверная кодировка  [new]
Santa89
Member

Откуда:
Сообщений: 1471
Шыфл получается еще хуже:

К сообщению приложен файл. Размер - 9Kb
7 сен 17, 13:06    [20778377]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet неверная кодировка  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4535
Santa89, не?
7 сен 17, 13:08    [20778385]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet неверная кодировка  [new]
aleks222
Guest
CODEPAGE = 'RAW'

 select * from
      openrowset( bulk 'C:\Gate\In\Atlantis\Carnival\TB_SUB_REGION.csv' 
           , FORMATFILE = 'C:\Gate\In\Atlantis\Carnival\TB_SUB_REGION.fmt'
           , CODEPAGE = 'RAW'
           , FIRSTROW = 2      
           ) as x;
7 сен 17, 13:08    [20778389]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet неверная кодировка  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 774
Santa89,

select @t=bulkColumn from openrowset(Bulk 'D:\data\xxxxxxxxxxxxx.txt', CODEPAGE='RAW',single_blob) x
7 сен 17, 13:15    [20778429]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet неверная кодировка  [new]
Santa89
Member

Откуда:
Сообщений: 1471
Шыфл - (приложил)
buser - странно но результирующий тип прописал как content-type →application/json;charset=UTF-8

может быть проблема при сохранении файла..

К сообщению приложен файл. Размер - 10Kb
7 сен 17, 13:28    [20778498]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet неверная кодировка  [new]
aleks222
Guest
Santa89
Шыфл - (приложил)
buser - странно но результирующий тип прописал как content-type →application/json;charset=UTF-8

может быть проблема при сохранении файла..


MS SQL не умеет UTF-8.
7 сен 17, 13:38    [20778541]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet неверная кодировка  [new]
Santa89
Member

Откуда:
Сообщений: 1471
aleks222 в какой же тогда кодировке мне сохранять файл чтобы MS SQL его смог скушать?
7 сен 17, 13:42    [20778559]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet неверная кодировка  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
UTF-16
7 сен 17, 13:43    [20778561]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet неверная кодировка  [new]
aleks222
Guest
Вариантов у тя, страдалец, два

1. Перекодировать файл перед загрузкой в win1251 или unicode (UTF-16).
2. Запросить ответ сервера сразу в UTF-16.
7 сен 17, 13:43    [20778563]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet неверная кодировка  [new]
Santa89
Member

Откуда:
Сообщений: 1471
Печально это...NET приложение где я сохраняю этот файл даёт на выбор только такие кодировки..

К сообщению приложен файл. Размер - 13Kb
7 сен 17, 13:52    [20778598]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet неверная кодировка  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
Unicode
7 сен 17, 13:53    [20778602]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet неверная кодировка  [new]
Santa89
Member

Откуда:
Сообщений: 1471
Konst_One - АЛЛИЛУЙА!!!!
Парни всем спасибо за помощь!

К сообщению приложен файл. Размер - 12Kb
7 сен 17, 13:56    [20778613]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet неверная кодировка  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
aleks222
Santa89
Шыфл - (приложил)
buser - странно но результирующий тип прописал как content-type →application/json;charset=UTF-8

может быть проблема при сохранении файла..


MS SQL не умеет UTF-8.
Судя по документации может
https://docs.microsoft.com/ru-ru/sql/t-sql/functions/openrowset-transact-sql
code_page Показывает исходную кодовую страницу, в которой представлены символы в файле данных, например 850.

**Важные * \* версии, предшествующие SQL Server 2016 не поддерживают кодовую страницу 65001 (кодировка UTF-8).
Но по факту не работает.

Тип xml умел работать с UTF-8.
Поэтому достаточно сделать так.

SELECT convert(nvarchar(max), convert(xml, BulkColumn)) 
FROM OPENROWSET(  
   BULK '/var/www/test.json', 
   SINGLE_BLOB) AS x

+ @@VERSION
Microsoft SQL Server 2017 (RC2) - 14.0.900.75 (X64)
Jul 27 2017 08:53:49
Copyright (C) 2017 Microsoft Corporation
Express Edition (64-bit) on Linux (Ubuntu 16.04.3 LTS)
7 ноя 17, 09:27    [20931385]     Ответить | Цитировать Сообщить модератору
 Re: OpenRowSet неверная кодировка  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
Так работает.
if OBJECT_ID('tempdb..#BulkImport') is not null drop table #BulkImport
CREATE TABLE #BulkImport (BulkColumn varchar(max) )

--Insert into #BulkImport
BULK INSERT #BulkImport
FROM '/var/www/test.json'
WITH (CODEPAGE = '65001', DATAFILETYPE = 'Char')

select * from #BulkImport

https://support.microsoft.com/en-us/help/3136780/utf-8-encoding-support-for-the-bcp-utility-and-bulk-insert-transact-sq
7 ноя 17, 09:38    [20931425]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить