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

Откуда:
Сообщений: 71
Столкнулся с очевидным недоразумением:
создаю таблицу t(v TEXT), куда мне нужно писать именно MultiByte текст (не юникод!), т.е. по сути поток байт.
Когда записываю туда строку "Привет" (с кодировкой 1251), то в файле .mdf вижу "Привет" именно в MultiByte 1251 - все ок.
А когда делаю выборку из базы в другой системе, где кодировка 1252 то данные приходят ввиде вопросов ??? (байт 3F), хотя должны CF F0 E8 ....
Причем это происходит и при чтении Value:OleVariant и при чтении данного поля как BLOB (вот здесь вообще непонятно!)

Т.е. вопрос свожу к тому: в базе лежит TEXT: CF F0 E8 ...., а читаю 3F 3F 3F при кодировке в системе 1252. Если кодировка 1251, то все ок.

Как побороть?
29 мар 13, 23:00    [14115153]     Ответить | Цитировать Сообщить модератору
 Re: Значение поля TEXT и MultiByte  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
Хранить данные в юникоде.
29 мар 13, 23:37    [14115320]     Ответить | Цитировать Сообщить модератору
 Re: Значение поля TEXT и MultiByte  [new]
victorovich
Member

Откуда:
Сообщений: 71
Стал бы я тогда писать. Этот вариант не проходит.
30 мар 13, 00:47    [14115495]     Ответить | Цитировать Сообщить модератору
 Re: Значение поля TEXT и MultiByte  [new]
aleks2
Guest
victorovich
Стал бы я тогда писать. Этот вариант не проходит.

Чему только в ясельках учат?
1. Все данные, которые сервер держит за "текст" в коде ANSI (1 байт/символ) подвергаются автоматическим и неконтролируемым (по большей части) преобразованиям в клиентских библиотеках подключения к MS SQL. Это MS не со зла сделала - оне "как лучше" хотели.
2. Все данные, которые сервер держит за "бинарные данные" НЕ подвергаются НИКАКИМ преобразованиям в клиентских библиотеках подключения к MS SQL. А передаются клиентскому приложению "как есть".
3. Отсель следует тривиальный вывод: передавайте свои данные как "бинарные данные" и сами преобразуйте в текст в своем клиентском приложении:
select cast(myText as binary(n)) from myTable

4. Но UNICODE - лучче.
30 мар 13, 11:05    [14115952]     Ответить | Цитировать Сообщить модератору
 Re: Значение поля TEXT и MultiByte  [new]
andrey odegov
Member

Откуда:
Сообщений: 473
aleks2
select cast(myText as binary(n)) from myTable
А так ли легко преобразовать из text в binary (SQL Server Data Type Conversion Chart)?
М.б. надо через промежуточное преобразование?
cast(cast(v as varchar(max)) collate ... as varbinary(max))
30 мар 13, 16:16    [14116377]     Ответить | Цитировать Сообщить модератору
 Re: Значение поля TEXT и MultiByte  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
aleks2
3. Отсель следует тривиальный вывод: передавайте свои данные как "бинарные данные"
Наивно и подло.
То что у "пострадавших" криво написан клиент, не следует:
1. Что надо грязно хакать бинарниками
2. Что бинарики выпрямят руки горепрогерам. Они и их то и декодировать будут криво. Притом с вероятностью в два раза большей.

victorovich
Как побороть?
Правильно подключать провайдер.

PS: Привет кодерам на доисторическом софте.
30 мар 13, 18:37    [14116610]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить