Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Кодировка proxy-таблицы / 22 сообщений из 22, страница 1 из 1
03.03.2007, 21:58
    #34369220
Cherub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
Создал proxy-таблицу - сервер Sybase ASE 12.5 , remote сервером является Sybase ASA 9.0 .
При просмотре прокси таблицы (через консоль, isql и т.д.) кирилица отображается квадратиками.
Начал копать оказалось default кодировка на Sybase ASE 12.5 iso_1 , на Sybase ASA 9.0 - cp1251 .
Как можно выкрутиться в такой ситуации и настроить/изменить кодировку прокси таблицы? Естественно изменять кодировки по умолчанию на серверах не представляется возможным.
...
Рейтинг: 0 / 0
03.03.2007, 23:22
    #34369287
kolchanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
> Естественно изменять кодировки по умолчанию на серверах не представляется возможным.

Честно говоря, это противоестественно.
Возможно, может помочь клиентские настройки на сервере, где стоит ASE.

Но лучше всего, исправьте кодировку сервера.
Переход iso_1 -> 1251 должен пройти без проблем, хотя и с перенастройкой клиентских машин.
...
Рейтинг: 0 / 0
05.03.2007, 12:14
    #34370909
Cherub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
Повтрю ещё раз, изменить кодировку серверов не представляется возможным.

Сейчас эксперементирую подсоединяя прокси таблицей - вьюшку, в которой пробую переконвертить поле с кирилицей
CSCONVERT(Name,'iso_1') as Name,
но результат не меняется, опять при просмотре прокси таблицы кирилица - квадратики.
Ради эксперимента пробовал разные кодировки (cp1251, UTF8, roman8), только при cp866 часть квадратиков меняется на нечитабельные иероглифы (например: "®§­© 6 ¬). Кстати при использовании CSCONVERT тип поля в прокси таблице определяется как image.

Может кто-то подскажет как можно выкрутиться и нормально отобразить кирилицу?!
...
Рейтинг: 0 / 0
05.03.2007, 17:24
    #34372121
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
Исправь строку подключения ASE к ASA. Укажи в ней ключевое слово Charset=чего-то-там, тогда сервер ASA сам будет переконвертировать данные из кодировки хранения в кодировку клиента (ASE в данном случае играет роль клиента).

---
http://www.rusug.ru] Портал русскоязычной группы пользователей Sybase
...
Рейтинг: 0 / 0
05.03.2007, 17:40
    #34372182
Cherub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
Так, а где можно указать эту самую таблицу кодировки в строке подключения? В настройках Remote Servers (master..sysservers) я не нашел такого параметра, в sql.ini тоже. Кроме того меня смущает, что при выполнении запроса
convert(varchar,CSCONVERT(Name,'iso_1'))
на сервере ASA9.0 где хранятся данные, результат те же квадратики вместо кирилицы...
...
Рейтинг: 0 / 0
05.03.2007, 18:17
    #34372305
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
CherubТак, а где можно указать эту самую таблицу кодировки в строке подключения? В настройках Remote Servers (master..sysservers) я не нашел такого параметра, в sql.ini тоже.Естественно ты этого параметра ты в своей строке подключения не найдешь, его же там еще нету :)
Ищи где у тебя задается "EngineName=aaaa;UID=bbb;PWD=ccc;LINKS=ddddd;CHARSET=eeee" Вместо EngineName может быть написано ENG=aaa или ServerName=aaa. Это все синонимы.

CherubКроме того меня смущает, что при выполнении запроса
convert(varchar,CSCONVERT(Name,'iso_1'))
на сервере ASA9.0 где хранятся данные, результат те же квадратики вместо кирилицы...Ну так а твой клиент в какой кодировке работает? Когда ты стартуешь dbisql, он автоматически читает предпочтительную кодировку твоей OS и стартует в ней. Хочешь чтобы он стартовал в другой кодировке - запускай с ключом -codepage iso_1. После этого, convert(varchar,CSCONVERT(Name,'iso_1')) должен заработать, но простой select уже покажет квадратики.
...
Рейтинг: 0 / 0
05.03.2007, 19:29
    #34372500
Cherub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
White Owl Естественно ты этого параметра ты в своей строке подключения не найдешь, его же там еще нету :)
Ищи где у тебя задается "EngineName=aaaa;UID=bbb;PWD=ccc;LINKS=ddddd;CHARSET=eeee" Вместо EngineName может быть написано ENG=aaa или ServerName=aaa. Это все синонимы.

Вот я и не знаю, где искать эту строку подключения.

В настройках Remote Servers при работе через консоль (сервер я добавлял через консоль) параметра CHARSET нет.
В системных таблицах я нашел только упоминание про имя удалённого сервера и класс подключения (в таблице master..sysservers), но строки подключения там нет.
В sql.ini, где я описывал параметры подключения указано следующее
Код: plaintext
1.
2.
3.
[Имя сервера]
master=TCP,host,port
query=TCP,host,port

Строка вида "EngineName=aaaa;UID=bbb;PWD=ccc;LINKS=ddddd;CHARSET=eeee" очень смахивает на строку подключения ОДБС, но я такого нигде не описывал и не нашел. Если при добавлении удалённого сервера через консоль такое создается, то где оно хранится? Хотя по моему консоль создает только запись в таблице sysservers.
...
Рейтинг: 0 / 0
05.03.2007, 20:34
    #34372589
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
если вы в iso_1 храните cp1251 как есть без перекодировки то может помочь такое (может быть):

еще в ASA постройте вьющку которая конвертит строки в image
при передаче image(varbinary) не конвертится
тогда при приеме в ASE у вас в image будет cp1251
вам останется конвертнуть image->char
в ASE:
Код: plaintext
1.
2.
3.
4.
5.
declare @c char( 5 )
declare @b binary( 10 )
select @b=convert(binary,'aef')
select @c=convert (varchar,@b)
select @b,@c

61656600000000000000aef
...
Рейтинг: 0 / 0
05.03.2007, 23:17
    #34372778
Cherub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
Dmitry.
еще в ASA постройте вьющку которая конвертит строки в image
при передаче image(varbinary) не конвертится
тогда при приеме в ASE у вас в image будет cp1251
вам останется конвертнуть image->char


Я уже пытался сделать так, но не получилось.Делал так, во вьюшке описывал поле
Код: plaintext
1.
convert (image, Name) as Name
Потом визуально сверял в прокси таблице и во вьюшке бинарные данные были одинаковые.
Но выполняя запрос к прокси таблице с преобразованием
Код: plaintext
1.
convert(varchar,Name)
всё равно получал кирилицу квадратиками.
...
Рейтинг: 0 / 0
06.03.2007, 11:06
    #34373590
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
да... провел тесты с запросом:

Код: plaintext
1.
2.
3.
4.
declare @c varchar( 20 )
declare @b varbinary( 20 )
select @b=convert(binary,'йцукен')
select @c=convert (varchar,@b)
select @b,@c

ASE (utf8/utf8)
d0b9d186d183d0bad0b5d0bd0000000000000000 йцукен

ASE (server:roman8 client:iso_1)
c5cec6c1d4d50000000000000000000000000000 йцукен

ASA (1251)
e9f6f3eae5ed йцукен
E9 это и есть ASCII код символа й

ХА!
ASE (server:roman8 client:roman8)
e9f6f3eae5ed0000000000000000000000000000 йцукен
это уже похоже на 1251
Проверьте что у вас в АСЕ чарсет на клиенте и сервере одинаковый иначе АСЕ конвертит все в соответствии с этими установками. Если чарсет одинаковый то никакой перекодировки нет.

достигнуть того-же можно еще ОТДЕЛЬНОЙ коммандой в АСЕ указать
Код: plaintext
set char_convert off

короче у меня все получилось...
...
Рейтинг: 0 / 0
06.03.2007, 11:43
    #34373790
Cherub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
Сижу тестирую, наткнулся на такой финт:

Если просто выполнять запрос (значение 0xcfe5edf1e8eeededfbe9203920ece5f1 взято с таблицы и на ASE и на ASA одинаковое)
Код: plaintext
1.
2.
select 
  convert (varchar,0xcfe5edf1e8eeededfbe9203920ece5f1) test
отображает кирилицу.

Но если подключить в условии from прокси таблицу, то квадратики во всех полях:
Код: plaintext
1.
2.
3.
4.
select 
  convert (varchar,0xcfe5edf1e8eeededfbe9203920ece5f1) test,
  Name, 
  convert (varchar,Name) 
from sh..ProxyTest

Если подключить любую другую, не прокси таблицу, опять отображает кирилицу...
Код: plaintext
1.
2.
select 
  convert (varchar,0xcfe5edf1e8eeededfbe9203920ece5f1) test,
from sh..Test

set char_convert on/off никак не повлиял на результат ;(
...
Рейтинг: 0 / 0
06.03.2007, 14:14
    #34374535
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
а что дает такой запрос?
Код: plaintext
1.
2.
select 
  distinct convert (varbinary,'Пенсионный 9 мес') test 
from sh..ProxyTest
...
Рейтинг: 0 / 0
06.03.2007, 14:42
    #34374664
Cherub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
Dmitry.
а что дает такой запрос?

Код: plaintext
1.
2.
select 
  distinct convert (varbinary,'Пенсионный 9 мес') test 
from sh..ProxyTest

Дает следующее:
Код: plaintext
4961696e65696969756520392069616e

Кстати при использовании в одном запросе (хоть select, хоть insert) двух таблиц, одна из которых прокси, поле Name прокси таблицы содержащее varbinary возвращает null!!! т.е. например при выполнении запроса:
Код: plaintext
1.
2.
3.
SELECT *
INTO sh..Test   
FROM sh..ProxyTest
ругается что поле Name не может содержать значение null, хотя в прокси таблице все записи в поле Name содержат данные, а само поле Name в прокси таблицу Allow Nulls=No. Точно также пробовал select с участием двух таблиц, одна из которых прокси - Name опять null, если в запросе только одна таблица - прокси таблица - данные в поле Name отображаются. Что за грабли? Как добраться до данных?
...
Рейтинг: 0 / 0
06.03.2007, 14:56
    #34374733
antand
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
Мысль пришла мимоходом, может поможет. Сам не сталкивался и попробовать не могу(ASE нет).
Здесь уже упоминали про ODBC.
Вроде как в настройках ODBC ASA9 можно указать CHARSET.
А может сервер ASA9 прописать как источник в ODBC с CHARSET нужным.
А в ASE прописать Remote Servers через ODBC.
...
Рейтинг: 0 / 0
06.03.2007, 17:25
    #34375321
Cherub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
antand
А в ASE прописать Remote Servers через ODBC.

В ASA настроить Remote Servers через ODBC нет проблем, а как это сделать в ASE???
И вообще возможно ли такое в ASE?
...
Рейтинг: 0 / 0
12.03.2007, 10:49
    #34383521
Cherub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
Люди! Проблема всё ещё актуальна, кто подскажет как получить данные прокси-таблицы в нормальной кодировке?
...
Рейтинг: 0 / 0
12.03.2007, 18:19
    #34385237
Sergey Orlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
Cherub Люди! Проблема всё ещё актуальна, кто подскажет как получить данные прокси-таблицы в нормальной кодировке?
Я в свое время ходил из FreeBSD к ASA использую FreeTDS, может тебе это поможет?
...
Рейтинг: 0 / 0
12.03.2007, 18:28
    #34385265
Cherub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
Sergey Orlov
Я в свое время ходил из FreeBSD к ASA использую FreeTDS, может тебе это поможет?

Операционка Windows 2003 - не Unix, поэтому как это может помочь не вижу... ;-(
...
Рейтинг: 0 / 0
13.03.2007, 11:38
    #34386503
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
попробуйте подключиться к аса как к асе
прописать его в sql.ini и создать ремоут сервер типа ASE
...
Рейтинг: 0 / 0
13.03.2007, 13:34
    #34387074
Cherub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
Dmitry.попробуйте подключиться к аса как к асе
прописать его в sql.ini и создать ремоут сервер типа ASE
Попробовал - результат никак не изменился (если не обращать внимание на ругань при конвертации полей datetime).
...
Рейтинг: 0 / 0
13.03.2007, 13:45
    #34387119
Cherub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
Вообщем пока решил эту проблему через изврат, в основе которого использовал идею Dmitry. (за что ему огромное, человеческое спасибо ;-) ), а именно:

Написал процедуру которая на ASE берет данные прокси таблицы конвертит поля с кирилицей в varbinary и запихивает их во временную таблицу, а потом со временной таблицы сливает в новую таблицу и поля varbinary конвертит в varchar. В результате получается новая (не прокси) таблица, которая содержит нормальную кирилицу. Выглядит это так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 SELECT convert(varbinary( 50 ),Name) as Name
 into #TMP
 FROM sh..ProxyTest 
    
 DROP TABLE sh..Test
 
 select convert(varchar( 50 ),Name) as Name
 into sh..Test   
 FROM #TMP
 
 grant select on sh..Test to UserRole 
 DROP TABLE #TMP
...
Рейтинг: 0 / 0
13.03.2007, 13:50
    #34387148
Cherub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кодировка proxy-таблицы
Если кто подскажет более "человеческое" решение, буду благодарен ;-))
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Кодировка proxy-таблицы / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]