From: | Marsupilami79 <marsupilami79(at)gmx(dot)de> |
---|---|
To: | "Wal, Jan Tjalling van der" <jan_tjalling(dot)vanderwal(at)wur(dot)nl>, Jon Raiford <raiford(at)labware(dot)com>, "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-28 11:16:59 |
Message-ID: | acca9004-ac38-fedb-8564-ea13edb5eb8c@gmx.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-odbc |
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%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>
> *Sent:* Tuesday, November 22, 2022 11:21:56 AM
> *To:* 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?
>
> 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>
> Sent: 22 November 2022 16:57
> To: 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
>
From | Date | Subject | |
---|---|---|---|
Next Message | Jon Raiford | 2022-11-28 14:01:54 | Re: SQLGetConnectAttrW + SQL_ATTR_CURRENT_CATALOG => wrong byte count? |
Previous Message | Wal, Jan Tjalling van der | 2022-11-25 19:22:48 | RE: SQLGetConnectAttrW + SQL_ATTR_CURRENT_CATALOG => wrong byte count? |