public inbox for [email protected]  
help / color / mirror / Atom feed
From: Marsupilami79 <[email protected]>
To: Wal, Jan Tjalling van der <[email protected]>
To: Jon Raiford <[email protected]>
To: [email protected] <[email protected]>
Subject: Re: SQLGetConnectAttrW + SQL_ATTR_CURRENT_CATALOG => wrong byte count?
Date: Mon, 28 Nov 2022 12:16:59 +0100
Message-ID: <[email protected]> (raw)
In-Reply-To: <AM0PR01MB56344D773BE9386629EED36DDD0E9@AM0PR01MB5634.eurprd01.prod.exchangelabs.com>
References: <[email protected]>
	<AM0PR01MB5634012E7A37C8D806933665DD0D9@AM0PR01MB5634.eurprd01.prod.exchangelabs.com>
	<SA1PR17MB5350D74A659E421C12CA9125BE0E9@SA1PR17MB5350.namprd17.prod.outlook.com>
	<AM0PR01MB56344D773BE9386629EED36DDD0E9@AM0PR01MB5634.eurprd01.prod.exchangelabs.com>

Hello Jan Tjalling, hello Jon,

Jon is right - SQLGetConnectAttrW is a WideChar function (2 Bytes per
Character). So the encoding in the PG database should not matter. It
should return the length for the SQL_ATTR_CURRENT_CATALOG attribute in
bytes. So for a database named "topsales" it should return 16 because
each character uses two bytes.

I assume this is a bug in the PostgreSQL ODBC driver. The question is
where to file a bug report and how to get this fixed? Is there a chance
to get this fixed?

With best regards,

Jan Baumgarten

Am 25.11.2022 um 20:22 schrieb Wal, Jan Tjalling van der:
>
> 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%[email protected];
> 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 <[email protected]>
> *Sent:* 25 November 2022 03:58
> *To:* Wal, Jan Tjalling van der <[email protected]>;
> Marsupilami79 <[email protected]>; [email protected]
> *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 <[email protected]>
> *Sent:* Tuesday, November 22, 2022 11:21:56 AM
> *To:* Marsupilami79 <[email protected]>;
> [email protected] <[email protected]>
> *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 <[email protected]>
> Sent: 22 November 2022 16:57
> To: [email protected]
> 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
>


view thread (7+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected], [email protected]
  Subject: Re: SQLGetConnectAttrW + SQL_ATTR_CURRENT_CATALOG => wrong byte count?
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox