Re: [ODBC] ODBC application works while libpq fails - Mailing list pgsql-odbc

From Inoue, Hiroshi
Subject Re: [ODBC] ODBC application works while libpq fails
Date
Msg-id 25e2b773-01dc-68a4-ff20-70368a471772@dream.email.ne.jp
Whole thread Raw
In response to Re: [ODBC] ODBC application works while libpq fails  (Igor Korot <ikorot01@gmail.com>)
List pgsql-odbc
Hi Igor,

On 2017/08/05 13:18, Igor Korot wrote:
> Hiroshi,
>
> On Fri, Aug 4, 2017 at 7:22 PM, Inoue, Hiroshi
> <h-inoue@dream.email.ne.jp> wrote:
>> Hi Igor,
>>
>>
>> On 2017/08/04 22:22, Igor Korot wrote:
>>> HI, Hiroshi,
>>>
>>> On Fri, Aug 4, 2017 at 9:17 AM, Inoue, Hiroshi
>>> <h-inoue@dream.email.ne.jp> wrote:
>>>> Hi Igor,
>>>>
>>>>
>>>> On 2017/08/04 20:59, Igor Korot wrote:
>>>>> Hi, Hiroshi,
>>>>>
>>>>> On Thu, Aug 3, 2017 at 12:06 AM, Igor Korot <ikorot01@gmail.com> wrote:
>>>>>> Hi, Hiroshi,
>>>>>>
>>>>>> On Wed, Aug 2, 2017 at 12:32 AM, Inoue, Hiroshi
>>>>>> <h-inoue@dream.email.ne.jp> wrote:
>>>>>>> Hi Igor,
>>>>>>>
>>>>>>>
>>>>>>> On 2017/08/02 12:40, Igor Korot wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> On Mon, Jul 31, 2017 at 9:05 AM, Igor Korot <ikorot01@gmail.com>
>>>>>>>> wrote:
>>>>>>>>>      Hi,
>>>>>>>>> I have a very weird situation.
>>>>>>>>>
>>>>>>>>> I am trying to develop an application which will connect to the
>>>>>>>>> PostgreSQL
>>>>>>>>> server thru 2 different methods: thru the ODBC and using libpq.
>>>>>>>>>
>>>>>>>>> Environment:
>>>>>>>>> MacOSX 10.8.
>>>>>>>>> Xcode 4 (latest available for 10.8)
>>>>>>>>> PostgreSQL 9.1 - original from OSX.
>>>>>>>>> Application is compiled with the UNICODE
>>>>>>>>> iODBC DM for OSX 10.8.
>>>>>>>>> Both application and DB server running on the same machine.
>>>>>>>>> The database I'm using was created with the default parameters (just
>>>>>>>>> CREATE DATABASE draft).
>>>>>>>>>
>>>>>>>>> When I connect with the ODBC driver, the application works as
>>>>>>>>> expected
>>>>>>>>> - no errors or problems.
>>>>>>>>>
>>>>>>>>> However when I tried to run the application with libpq I received an
>>>>>>>>> error. The error is:
>>>>>>>>>
>>>>>>>>> [quote]
>>>>>>>>> Invalid byte sequence for encoding UTF-8 0xc3\n
>>>>>>>>> [/quote]
>>>>>>>>>
>>>>>>>>> The application is written in C++ (not ObjC++).
>>>>>>>>> The table I am trying to query contains the field with the word
>>>>>>>>> "abc+<ALT225>", which inside the database is translated as
>>>>>>>>> "abc\xc3\x9f".
>>>>>>>>>
>>>>>>>>> What could be the reason for such behavior?
>>>>>>>>>
>>>>>>>>> Is ODBC driver sets the client encoding to some uniform value?
>>>>>>>>> Or there something else?
>>>>>>>> Here is the content of my .odbc.ini for PostgreSQL on Mac:
>>>>>>>>
>>>>>>>> [code]
>>>>>>>> [postgre]
>>>>>>>> Driver               = PostgreSQL Unicode Driver
>>>>>>>> host                 = localhost
>>>>>>>> ServerName           = localhost
>>>>>>>> SERVER               = localhost
>>>>>>>> PORT                 = 5432
>>>>>>>> UserName             = postgres
>>>>>>>> Password             = <my_passwd>
>>>>>>>> Database             = draft
>>>>>>>> UseServerSidePrepare = 1
>>>>>>>> [/code]
>>>>>>>>
>>>>>>>> As you can see there is no special encoding settings. So it uses one
>>>>>>>> that is set by default.
>>>>>>>> But using ODBC API works and trying libpq - doesn't.
>>>>>>>>
>>>>>>>> Could someone please help?
>>>>>>>
>>>>>>> What is a query which causes a failure?
>>>>>>> What is a result of locale command?
>>>>>> Sorry for the noise.
>>>>>> I think I found the culprit and in the process of fixing it.
>>>>>>
>>>>>> I will let you know how it goes.
>>>>> Apparently I didn't fix it yet.
>>>>>
>>>>> So here is information requested:
>>>>>
>>>>> MyMac:dbhandler igorkorot$ locale
>>>>> LANG="en_US.UTF-8"
>>>>> LC_COLLATE="en_US.UTF-8"
>>>>> LC_CTYPE="en_US.UTF-8"
>>>>> LC_MESSAGES="en_US.UTF-8"
>>>>> LC_MONETARY="en_US.UTF-8"
>>>>> LC_NUMERIC="en_US.UTF-8"
>>>>> LC_TIME="en_US.UTF-8"
>>>>> LC_ALL=
>>>>>
>>>>> And the failing query is:
>>>>>
>>>>> SELECT * FROM \"abcatcol\" WHERE \"abc_tnam\" = $1 AND \"abc_ownr\" =
>>>>> $2 AND \"abc_cnam\" = $3;
>>>>>
>>>>> First parameter is "public.abc\xc3\x9f", second - "public" and third -
>>>>> "id".

Could you send me directly the code around the query?

regards,
Hiroshi Inoue

>>>>>
>>>>> The error is "Invalid key sequence for UTF-8".
>>>>
>>>> Do you call setlocale(LC_ALL, "") first?
>>> No I do not.
>>> Is it what ODBC driver does?
>>
>> Yes.
>> Unless setlocale() is called, "C" locale is selected.
> I put in following:
>
> [code]
> class PostgreSQLDB
> {
> public:
>      PostgreSQLDB();
> private:
>      char m_oldLocale[32], *m_currentlocale;
> };
>
> PostgreSQLDB::PostgreSQLDB()
> {
>      strcpy( m_oldLocale, setlocale( LC_ALL, NULL ) );
>      m_currentlocale = setlocale( LC_ALL, "" );
> }
> [/code]
>
> Looking under the debugger I see that:
>
> m_oldLocale = "C/UTF-8/C/C/C/C"
> m_currentLocale = "C"
>
> So it looks like on Mac OSX it uses "C" locale when there is "" passed in.
>
> But then I don't understand why ODBC app works....
>
> Any idea?
>
> Thank you.
>
>>
>> regards,
>> Hiroshi Inoue
>>
>>> Thank you.
>>>
>>> BTW, with ODBC the table name is successfully converted to be
>>> "abc<ALT+225>"
>>> (it's a greek letter "beta" or a symbol for a German "ss" sound.- ß).
>>>
>>>
>>>> regards,
>>>> Hiroshi Inoue
>>>>>
>>>>> Thank you.
>>>>>
>>>>>> Thank you.
>>>>>>
>>>>>>> regards,
>>>>>>> Hiroshi Inoue
>>>>>>>
>>>>>>>> Thank you.
>>>>>>>>
>>>>>>>>
>>>>>>>>> Thank you.


pgsql-odbc by date:

Previous
From: Kazuki Uehara
Date:
Subject: Re: [ODBC] When doing installcheck, an error message "unresolvedexternal symbol _get_test_dsn ..." displays.
Next
From: Matej Mihelič
Date:
Subject: [ODBC] A possible bug candidate in the 9.6.0411 when using theServerSidePrepare option