powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / ODBC: stored procedure varchar parameter convertion
8 сообщений из 8, страница 1 из 1
ODBC: stored procedure varchar parameter convertion
    #34677468
zsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zsm
Гость
День добрый.

Для доступа к базе на Postres использую C++ && ODBC.
OC: WinXP SP2
Код: plaintext
1.
2.
select version();
"PostgreSQL 8.2.4 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 (mingw-special)"

Есть некая ХП, у которой один из параметров varchar.
Если в составе строки, которая передается в качестве значения этого параметра, входят символы, с кодом больше 127, то в хранимую процедуру, эти символы поступают уже в виде 2-ух других символов, т.е. происходит некая перекодировка, чего, как я понимаю, происходить не должно в силу
Код: plaintext
1.
2.
3.
4.
SHOW server_encoding;
"SQL_ASCII"

SHOW client_encoding;
"SQL_ASCII"

Я предполагаю, что эту конвертацию выполняет драйвер ODBC (используется штатный, который идет в составе дистрибутива).

Никаких опций, связанных с перекодировкой значений парамеров/колонок я не нашел.

Пробовал устанавливать принудительно "SET client_encoding = 'SQL_ASCII'" для сессии.
Не помогло.

Может кто посоветует: куда копать?
...
Рейтинг: 0 / 0
ODBC: stored procedure varchar parameter convertion
    #34677540
Фотография Zashibis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какую ODBC функцию используете для отправки ХП на сервер?
SQLExecuteDirectW?
...
Рейтинг: 0 / 0
ODBC: stored procedure varchar parameter convertion
    #34677590
zsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zsm
Гость
ZashibisА какую ODBC функцию используете для отправки ХП на сервер?
SQLExecuteDirectW?

Да, SQLExecuteDirectW
Приложение Unicode.

::SQLExecDirect ( _T( "{call myproc (?,?,?)}" ), ... );

Соотвественно, и версия драйвера: DRIVER={PostgreSQL Unicode};
...
Рейтинг: 0 / 0
ODBC: stored procedure varchar parameter convertion
    #34677785
Фотография Zashibis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ODBC драйвере в юникодных функциях производится принудительная перекодировка всех входных запросов.
Т.е. предполагается что на вход SQLExecuteDirectW подается юникодная строка, далее при помощи специальной функции производится перекодировка в 'SQL_ASCII', и после этого запрос обрабатывается обычным SQLExecuteDirect.
Вы уверены что на вход функции SQLExecuteDirectW подаете юникодную строку, или все-таки обычную?
...
Рейтинг: 0 / 0
ODBC: stored procedure varchar parameter convertion
    #34678062
zsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zsm
Гость
ZashibisВ ODBC драйвере в юникодных функциях производится принудительная перекодировка всех входных запросов.
Т.е. предполагается что на вход SQLExecuteDirectW подается юникодная строка, далее при помощи специальной функции производится перекодировка в 'SQL_ASCII', и после этого запрос обрабатывается обычным SQLExecuteDirect.
Вы уверены что на вход функции SQLExecuteDirectW подаете юникодную строку, или все-таки обычную?

На вход SQLExecuteDirectW подается _T( "{call (?,?,?)}" ), т.е. Unicode.
Но мне кажется, тут дело не в SQLExecuteDirectW.
Обратите внимание, что передача параметров осуществляется не в самое строке запроса, которая передается в SQLExecuteDirectW, а при помощи SQLBindParameter.
При этом значение параметра и bind-ится (тип SQL_VARCHAR, а не SQL_WCHAR), и лежит в соответствующем буфере в виде обычной Си-строки.
Как я понимаю, никакого преобразования происходить не должно.
Но коль оно все же происходит и, предполагая, что выполняется оно именно ODBC-драйвером, думаю, что осуществляется оно перед передачей пареметра серверу.
...
Рейтинг: 0 / 0
ODBC: stored procedure varchar parameter convertion
    #34678070
zsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zsm
Гость
ZashibisВы уверены что на вход функции SQLExecuteDirectW подаете юникодную строку, или все-таки обычную?

Кстати, обычную строку при всем желании передать не получится.
Придется самому конвертить в Unicode.
...
Рейтинг: 0 / 0
ODBC: stored procedure varchar parameter convertion
    #34678099
Фотография Zashibis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ODBC драйвере от PostgreSQL есть возможность включить логи (если скомпилировано с опцией debug), посмотрите у себя:
утилита odbcad32
Пункт Пользовательский DNS - Выбрать из списска драйвер постгри, далее кнопка Настройка
И в открывшемся окне кнопка Global
Там будет две галочки.
Если выложите этот лог, то возможно удасться прояснить ситуацию
...
Рейтинг: 0 / 0
ODBC: stored procedure varchar parameter convertion
    #34678431
zsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zsm
Гость
ZashibisВ ODBC драйвере от PostgreSQL есть возможность включить логи (если скомпилировано с опцией debug), посмотрите у себя:
утилита odbcad32
Пункт Пользовательский DNS - Выбрать из списска драйвер постгри, далее кнопка Настройка
И в открывшемся окне кнопка Global
Там будет две галочки.
Если выложите этот лог, то возможно удасться прояснить ситуацию

К базе цепляюсь напрямую через драйвер.
В качестве первого параметра ХП "GetPartitionName_sp" передаю строку, состяющую из символов, с кодами: 1,2, ..., 255, разделенных символом дефиса.

То, что можно увидеть в прилагаемом логе, лино мне очень напоминает перекодировку в UTF-8.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / ODBC: stored procedure varchar parameter convertion
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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