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

Откуда: Москва
Сообщений: 4807
Запускаю

exec xp_cmdshell  'bcp "SELECT id_age_span,Name,years_from,year_to FROM Dictionary.Dim_AgeSpan_InMemory" queryout "K:\exp_tmp\Dictionary.txt" -T -c  -C 65001';


получаю

Error = [Microsoft][ODBC Driver 11 for SQL Server]This version of ODBC Driver for SQL Server does not support UTF-8 encoding (code page 65001)


есть способ получить всё-таки файл в utf-8 ?

Microsoft SQL Server 2014 - 12.0.4416.0 (X64)
Jun 11 2015 19:18:41
Copyright (c) Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
9 сен 15, 10:48    [18126812]     Ответить | Цитировать Сообщить модератору
 Re: bcp & utf-8  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
есть способ получить всё-таки файл в utf-8 ?

- написать свой конвертатор
- использовать уже написанный кем-то конвертатор
- хранить начальные данные в нужной кодировке
9 сен 15, 10:50    [18126826]     Ответить | Цитировать Сообщить модератору
 Re: bcp & utf-8  [new]
invm
Member

Откуда: Москва
Сообщений: 9632
a_voronin
есть способ получить всё-таки файл в utf-8 ?
Можно.
Получить в UTF-16, потом любым подходящим тулом преобразовать в UTF-8.
9 сен 15, 10:53    [18126851]     Ответить | Цитировать Сообщить модератору
 Re: bcp & utf-8  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4807
invm,

на эти два тоже матерится.

1200 utf-16 Unicode UTF-16, little endian byte order (BMP of ISO 10646); available only to managed applications
1201 unicodeFFFE Unicode UTF-16, big endian byte order; available only to managed applications

Русские буквы сохраняются только с 1251 .

Ладно будет конвертер искать.
9 сен 15, 10:59    [18126884]     Ответить | Цитировать Сообщить модератору
 Re: bcp & utf-8  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
a_voronin
Ладно будет конвертер искать.


порт iconv для windows
9 сен 15, 11:07    [18126942]     Ответить | Цитировать Сообщить модератору
 Re: bcp & utf-8  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
churupaha,

Налету правда без сохранения промежуточного файла не выйдет.

bcp "SELECT * FROM..." ... | iconv -f UCS-2 -t UTF-8 - | gzip -c - > out_XXX_20150909_1122.txt.gz


bcp and stdio
9 сен 15, 11:22    [18127070]     Ответить | Цитировать Сообщить модератору
 Re: bcp & utf-8  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4807
churupaha,

где наша не пропадала

using System.IO;
using System.Text;

namespace Convert1251Utf8
{
    class Program
    {
        static void Main(string[] args)
        {
            string text = File.ReadAllText(args[0], Encoding.GetEncoding(1251));
            File.WriteAllText(args[1], text, Encoding.UTF8);
        }
    }
}
9 сен 15, 11:37    [18127172]     Ответить | Цитировать Сообщить модератору
 Re: bcp & utf-8  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8300
a_voronin,

SSIS пишет в файл как раз в UTF-8, только без BOM. Для бом пришлось делать скрипт на С# в пакете.
9 сен 15, 11:55    [18127281]     Ответить | Цитировать Сообщить модератору
 Re: bcp & utf-8  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
a_voronin
churupaha,

где наша не пропадала

            string text = File.ReadAllText(args[0], Encoding.GetEncoding(1251));


а что, файлы экспорта мелкие, что все за раз в память? может лучше кусками (тем более, если память не изменяет под капотом .NET обертки для работы с файлами используют Memory Mapped Files с префетчем, а может и путаю)? максимальная длина .net string = (2Gb / 2 byte) символов.

не по кашруту это, что такая тулза, как bcp не поддерживает stdin/stdout. по мне, так unix way удобнее программки на каждый чих.
9 сен 15, 12:06    [18127363]     Ответить | Цитировать Сообщить модератору
 Re: bcp & utf-8  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4807
churupaha
a_voronin
churupaha,

где наша не пропадала

            string text = File.ReadAllText(args[0], Encoding.GetEncoding(1251));


а что, файлы экспорта мелкие, что все за раз в память? может лучше кусками (тем более, если память не изменяет под капотом .NET обертки для работы с файлами используют Memory Mapped Files с префетчем, а может и путаю)? максимальная длина .net string = (2Gb / 2 byte) символов.

не по кашруту это, что такая тулза, как bcp не поддерживает stdin/stdout. по мне, так unix way удобнее программки на каждый чих.


Ну в 64 бит >2Gb. Понятно, что для мегаобёмов можно и правильно написать буферизованное поточное копирование. Но копировать за одну порцию гигантские объёмы никто не собирается.
9 сен 15, 12:13    [18127425]     Ответить | Цитировать Сообщить модератору
 Re: bcp & utf-8  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
a_voronin
Ну в 64 бит >2Gb.


Не. Такой же как и в 32 bit. Да и в 64 bit не все гладко

https://msdn.microsoft.com/en-us/library/hh285054(v=vs.110).aspx

gcAllowVeryLargeObjects

On 64-bit platforms, enables arrays that are greater than 2 gigabytes (GB) in total size.


Using this element in your application configuration file enables arrays that are larger than 2 GB in size, but does not change other limits on object size or array size:

The maximum number of elements in an array is UInt32.MaxValue.

The maximum index in any single dimension is 2,147,483,591 (0x7FFFFFC7) for byte arrays and arrays of single-byte structures, and 2,146,435,071 (0X7FEFFFFF) for other types.

The maximum size for strings and other non-array objects is unchanged.
9 сен 15, 12:21    [18127492]     Ответить | Цитировать Сообщить модератору
 Re: bcp & utf-8  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4807
churupaha,

Пустословие из ничего. Проще всего порции выгружаемых данных держать в пределах разумного. А если понадобиться, то порционное копирование можно ещё за 5 минут написать.
9 сен 15, 12:29    [18127543]     Ответить | Цитировать Сообщить модератору
 Re: bcp & utf-8  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
a_voronin
Пустословие из ничего.


Это реакция на размер строки в 64bit?
9 сен 15, 12:32    [18127568]     Ответить | Цитировать Сообщить модератору
 Re: bcp & utf-8  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4807
churupaha
a_voronin
Пустословие из ничего.


Это реакция на размер строки в 64bit?


Это реакция за то, что начали за здравие с кодировки в BCP, а закончили за упокой про размер строки с C#.
9 сен 15, 13:09    [18127842]     Ответить | Цитировать Сообщить модератору
 Re: bcp & utf-8  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
a_voronin
churupaha
пропущено...


Это реакция на размер строки в 64bit?


Это реакция за то, что начали за здравие с кодировки в BCP, а закончили за упокой про размер строки с C#.


Хм, таки, вы начали отсюда 18127172, а мы потом углУбили ((c) М. С. Горбачев) и закончили. И, судя повсему, незря же. Выяснились любопытные вещи 18127492.
9 сен 15, 13:22    [18127950]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить