Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
ODBC: stored procedure varchar parameter convertion
|
|||
|---|---|---|---|
|
#18+
День добрый. Для доступа к базе на Postres использую C++ && ODBC. OC: WinXP SP2 Код: plaintext 1. 2. Есть некая ХП, у которой один из параметров varchar. Если в составе строки, которая передается в качестве значения этого параметра, входят символы, с кодом больше 127, то в хранимую процедуру, эти символы поступают уже в виде 2-ух других символов, т.е. происходит некая перекодировка, чего, как я понимаю, происходить не должно в силу Код: plaintext 1. 2. 3. 4. Я предполагаю, что эту конвертацию выполняет драйвер ODBC (используется штатный, который идет в составе дистрибутива). Никаких опций, связанных с перекодировкой значений парамеров/колонок я не нашел. Пробовал устанавливать принудительно "SET client_encoding = 'SQL_ASCII'" для сессии. Не помогло. Может кто посоветует: куда копать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 15:02 |
|
||
|
ODBC: stored procedure varchar parameter convertion
|
|||
|---|---|---|---|
|
#18+
А какую ODBC функцию используете для отправки ХП на сервер? SQLExecuteDirectW? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 15:17 |
|
||
|
ODBC: stored procedure varchar parameter convertion
|
|||
|---|---|---|---|
|
#18+
ZashibisА какую ODBC функцию используете для отправки ХП на сервер? SQLExecuteDirectW? Да, SQLExecuteDirectW Приложение Unicode. ::SQLExecDirect ( _T( "{call myproc (?,?,?)}" ), ... ); Соотвественно, и версия драйвера: DRIVER={PostgreSQL Unicode}; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 15:28 |
|
||
|
ODBC: stored procedure varchar parameter convertion
|
|||
|---|---|---|---|
|
#18+
В ODBC драйвере в юникодных функциях производится принудительная перекодировка всех входных запросов. Т.е. предполагается что на вход SQLExecuteDirectW подается юникодная строка, далее при помощи специальной функции производится перекодировка в 'SQL_ASCII', и после этого запрос обрабатывается обычным SQLExecuteDirect. Вы уверены что на вход функции SQLExecuteDirectW подаете юникодную строку, или все-таки обычную? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 16:22 |
|
||
|
ODBC: stored procedure varchar parameter convertion
|
|||
|---|---|---|---|
|
#18+
ZashibisВ ODBC драйвере в юникодных функциях производится принудительная перекодировка всех входных запросов. Т.е. предполагается что на вход SQLExecuteDirectW подается юникодная строка, далее при помощи специальной функции производится перекодировка в 'SQL_ASCII', и после этого запрос обрабатывается обычным SQLExecuteDirect. Вы уверены что на вход функции SQLExecuteDirectW подаете юникодную строку, или все-таки обычную? На вход SQLExecuteDirectW подается _T( "{call (?,?,?)}" ), т.е. Unicode. Но мне кажется, тут дело не в SQLExecuteDirectW. Обратите внимание, что передача параметров осуществляется не в самое строке запроса, которая передается в SQLExecuteDirectW, а при помощи SQLBindParameter. При этом значение параметра и bind-ится (тип SQL_VARCHAR, а не SQL_WCHAR), и лежит в соответствующем буфере в виде обычной Си-строки. Как я понимаю, никакого преобразования происходить не должно. Но коль оно все же происходит и, предполагая, что выполняется оно именно ODBC-драйвером, думаю, что осуществляется оно перед передачей пареметра серверу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 17:29 |
|
||
|
ODBC: stored procedure varchar parameter convertion
|
|||
|---|---|---|---|
|
#18+
ZashibisВы уверены что на вход функции SQLExecuteDirectW подаете юникодную строку, или все-таки обычную? Кстати, обычную строку при всем желании передать не получится. Придется самому конвертить в Unicode. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 17:31 |
|
||
|
ODBC: stored procedure varchar parameter convertion
|
|||
|---|---|---|---|
|
#18+
В ODBC драйвере от PostgreSQL есть возможность включить логи (если скомпилировано с опцией debug), посмотрите у себя: утилита odbcad32 Пункт Пользовательский DNS - Выбрать из списска драйвер постгри, далее кнопка Настройка И в открывшемся окне кнопка Global Там будет две галочки. Если выложите этот лог, то возможно удасться прояснить ситуацию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 17:39 |
|
||
|
ODBC: stored procedure varchar parameter convertion
|
|||
|---|---|---|---|
|
#18+
ZashibisВ ODBC драйвере от PostgreSQL есть возможность включить логи (если скомпилировано с опцией debug), посмотрите у себя: утилита odbcad32 Пункт Пользовательский DNS - Выбрать из списска драйвер постгри, далее кнопка Настройка И в открывшемся окне кнопка Global Там будет две галочки. Если выложите этот лог, то возможно удасться прояснить ситуацию К базе цепляюсь напрямую через драйвер. В качестве первого параметра ХП "GetPartitionName_sp" передаю строку, состяющую из символов, с кодами: 1,2, ..., 255, разделенных символом дефиса. То, что можно увидеть в прилагаемом логе, лино мне очень напоминает перекодировку в UTF-8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 20:18 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=292&tid=2005243]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 242ms |
| total: | 368ms |

| 0 / 0 |
