Thread: Varchar parameter conversion
Hello,
My client program is developed on C++ & ODBC.
It’s a Windows Unicode application.
I’m trying to pass a “varchar” parameter value to a user-defined stored procedure.
Each character of this actual parameter value (which ASC code is greater than 127) is transformed into some two chars.
This value is stored and bound as a non-Unicode string (traditional C-string) in the program.
So, some conversion happens for these characters.
It seems to me that it’s the ODBC driver’s intervention.
Is that right?
And how can I avoid this unwanted conversion?
Additional environment info:
OS: Windows XP SP2
PostgreSQL version: “PostgreSQL 8.2.4 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 (mingw-special)”
ODBC driver version: PostgreSQL Unicode 8.02.04.00
SHOW server_encoding;
"SQL_ASCII"
SHOW client_encoding;
"SQL_ASCII"
Thank you.
Hello, Try to use statements with parameters: SQLBindParameters(stmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, query_length, 0, param_ptr, query_length, buff_ptr); SQLExecDirect(stmt, "{call SomeProc(?}}"); Zubkovsky, Sergey wrote: > > Hello, > > My client program is developed on C++ & ODBC. > > It’s a Windows Unicode application. > > I’m trying to pass a “varchar” parameter value to a user-defined > stored procedure. > > Each character of this actual parameter value (which ASC code is > greater than 127) is transformed into some two chars. > > This value is stored and bound as a non-Unicode string (traditional > C-string) in the program. > > So, some conversion happens for these characters. > > It seems to me that it’s the ODBC driver’s intervention. > > Is that right? > > And how can I avoid this unwanted conversion? > > Additional environment info: > > OS: Windows XP SP2 > > PostgreSQL version: “PostgreSQL 8.2.4 on i686-pc-mingw32, compiled by > GCC gcc.exe (GCC) 3.4.2 (mingw-special)” > > ODBC driver version: PostgreSQL Unicode 8.02.04.00 > > SHOW server_encoding; > > "SQL_ASCII" > > SHOW client_encoding; > > "SQL_ASCII" > > Thank you. >
Hello, Thank you for your answer! But this is the same what I do exactly. I have realized the stored procedure call with a varchar parameter value which originally contained characters with the ASC-codes from 1 to 255. For visualization purpose all these chars were separated by char '-'. A log file was produced by the ODBC driver is attached. Look at the "GetPartitionName_sp" stored procedure call. I suppose that the first parameter was converted to UTF-8. But I didn't do this conversion! -----Original Message----- From: Andrei Kovalevski [mailto:andyk@commandprompt.com] Sent: Monday, July 23, 2007 6:41 PM To: Zubkovsky, Sergey Cc: pgsql-odbc@postgresql.org Subject: Re: [ODBC] Varchar parameter conversion Hello, Try to use statements with parameters: SQLBindParameters(stmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, query_length, 0, param_ptr, query_length, buff_ptr); SQLExecDirect(stmt, "{call SomeProc(?}}"); Zubkovsky, Sergey wrote: > > Hello, > > My client program is developed on C++ & ODBC. > > It's a Windows Unicode application. > > I'm trying to pass a "varchar" parameter value to a user-defined > stored procedure. > > Each character of this actual parameter value (which ASC code is > greater than 127) is transformed into some two chars. > > This value is stored and bound as a non-Unicode string (traditional > C-string) in the program. > > So, some conversion happens for these characters. > > It seems to me that it's the ODBC driver's intervention. > > Is that right? > > And how can I avoid this unwanted conversion? > > Additional environment info: > > OS: Windows XP SP2 > > PostgreSQL version: "PostgreSQL 8.2.4 on i686-pc-mingw32, compiled by > GCC gcc.exe (GCC) 3.4.2 (mingw-special)" > > ODBC driver version: PostgreSQL Unicode 8.02.04.00 > > SHOW server_encoding; > > "SQL_ASCII" > > SHOW client_encoding; > > "SQL_ASCII" > > Thank you. >