Thread: Varchar parameter conversion

Varchar parameter conversion

From
"Zubkovsky, Sergey"
Date:

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.

 

Re: Varchar parameter conversion

From
Andrei Kovalevski
Date:
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.
>


Re: Varchar parameter conversion

From
"Zubkovsky, Sergey"
Date:
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.
>