RE: SQLGetConnectAttrW + SQL_ATTR_CURRENT_CATALOG => wrong byte count?

From: "Wal, Jan Tjalling van der" <jan_tjalling(dot)vanderwal(at)wur(dot)nl>
To: Jon Raiford <raiford(at)labware(dot)com>, Marsupilami79 <marsupilami79(at)gmx(dot)de>, "pgsql-odbc(at)lists(dot)postgresql(dot)org" <pgsql-odbc(at)lists(dot)postgresql(dot)org>
Subject: RE: SQLGetConnectAttrW + SQL_ATTR_CURRENT_CATALOG => wrong byte count?
Date: 2022-11-25 19:22:48
Message-ID: AM0PR01MB56344D773BE9386629EED36DDD0E9@AM0PR01MB5634.eurprd01.prod.exchangelabs.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc

Okay, getting out of my comfort zone here.
I have found encoding options for PostgreSQL (v15) here:
PostgreSQL: Documentation: 15: 24.3. Character Set Support<https://www.postgresql.org/docs/current/multibyte.html>; they do not include UTF16, just UTF8.
There is no mention of UTF16 anywhere on that page.

I also found this: PostgreSQL: Re: DataDirect Driver, ExecDirect and UTF-8<https://www.postgresql.org/message-id/C631E68E.133%25ksell@greenplum.com> that does mention WCHAR being different form CHAR and how that could work.

I hope there is something on these pages that helps you further.

Kind regards, Jan Tjalling

From: Jon Raiford <raiford(at)labware(dot)com>
Sent: 25 November 2022 03:58
To: Wal, Jan Tjalling van der <jan_tjalling(dot)vanderwal(at)wur(dot)nl>; Marsupilami79 <marsupilami79(at)gmx(dot)de>; pgsql-odbc(at)lists(dot)postgresql(dot)org
Subject: Re: SQLGetConnectAttrW + SQL_ATTR_CURRENT_CATALOG => wrong byte count?

I believe the point is that the function is a "W" (wide char 16-bit) function so the strings should be UTF-16.

Jon
________________________________
From: Wal, Jan Tjalling van der <jan_tjalling(dot)vanderwal(at)wur(dot)nl<mailto:jan_tjalling(dot)vanderwal(at)wur(dot)nl>>
Sent: Tuesday, November 22, 2022 11:21:56 AM
To: Marsupilami79 <marsupilami79(at)gmx(dot)de<mailto:marsupilami79(at)gmx(dot)de>>; pgsql-odbc(at)lists(dot)postgresql(dot)org<mailto:pgsql-odbc(at)lists(dot)postgresql(dot)org> <pgsql-odbc(at)lists(dot)postgresql(dot)org<mailto:pgsql-odbc(at)lists(dot)postgresql(dot)org>>
Subject: RE: SQLGetConnectAttrW + SQL_ATTR_CURRENT_CATALOG => wrong byte count?

Hello Marsupilami79, Jan,

It could be that the answers you receive are in fact correct for postgres.
In a database set to charset=UTF-8 I get the following answers.

select 'topsales' as string, char_length('topsales'), length('topsales'), octet_length('topsales');
"string" "char_length" "length" "octet_length"
"topsales" 8 8 8

However for a variation that requires more bytes to store the answer start to differ.
select 'töpsålés'as string, char_length('töpsålés'), length('töpsålés'), octet_length('töpsålés');
"string" "char_length" "length" "octet_length"
"töpsålés" 8 8 11

In the above octet_length is a postgres-function that yields results in bytes.
And the three characters with a diacritical added, each requires 2 bytes, yielding a resulting lengt of 11 instead of 8.

Kind regards, Jan Tjalling van der Wal

-----Original Message-----
From: Marsupilami79 <marsupilami79(at)gmx(dot)de<mailto:marsupilami79(at)gmx(dot)de>>
Sent: 22 November 2022 16:57
To: pgsql-odbc(at)lists(dot)postgresql(dot)org<mailto:pgsql-odbc(at)lists(dot)postgresql(dot)org>
Subject: SQLGetConnectAttrW + SQL_ATTR_CURRENT_CATALOG => wrong byte count?

Hello,

I am a co author of a data access library and we recently added an ODBC bridge. This bridge has the capability to detemine the current Catalog / Database. This is done by calling SQLGetConnectAttrW.

We try to determine the size of the buffer that is needed for the catalog name in the following manner:
SQLGetConnectAttrW(fHDBC, SQL_ATTR_CURRENT_CATALOG, null, 0, &aLen)

The ODBC driver for Microsoft SQL server correctly returns the number of bytes required (10 bytes for the Database name "Stork") in the aLen parameter. The ODBC driver for PostgreSQL returns the number of characters (8 characters for a database named "topsales"), where it should return 16 for the number of bytes required.

I tested this with the psqlodbc_13_02_0000-x86 download for Windows 10 and installed the Unicode ODBC driver.

I assume this is a bug and needs to be fixed. I just don't know if this is the right place to report the bug to?

With best regards,

Jan

In response to

Responses

Browse pgsql-odbc by date

  From Date Subject
Next Message Marsupilami79 2022-11-28 11:16:59 Re: SQLGetConnectAttrW + SQL_ATTR_CURRENT_CATALOG => wrong byte count?
Previous Message Jon Raiford 2022-11-25 02:58:25 Re: SQLGetConnectAttrW + SQL_ATTR_CURRENT_CATALOG => wrong byte count?