Обсуждение: UNICODE

Поиск
Список
Период
Сортировка

UNICODE

От
FAU
Дата:
Hello,

I'm trying to understand how (unix)ODBC and psqlodbc work together
regarding UNICODE.

So from what I understand is that ODBC UNICODE is/was inherently
UCS-2LE.  Does the UNICODE driver version (which is psqlodbcw.so I
assume) expect/send UCS-2LE or (as I read somewhere) UTF-8, or does it
expect/send whatever the back-end database is setup to?

Does the driver work the same way on Win and GNU/Linux regarding
UNICODE?

Thanks,
Frank




Re: UNICODE

От
"Inoue, Hiroshi"
Дата:
Hi,

(2013/07/10 1:29), FAU wrote:
> Hello,
>
> I'm trying to understand how (unix)ODBC and psqlodbc work together
> regarding UNICODE.
>
> So from what I understand is that ODBC UNICODE is/was inherently
> UCS-2LE.

Currently UTF-16LE or UTF-16BE according to the endianness of the
machine.

> Does the UNICODE driver version (which is psqlodbcw.so I
> assume) expect/send UCS-2LE or (as I read somewhere) UTF-8, or does it
> expect/send whatever the back-end database is setup to?

The unicode driver expects UTF-16 not UTF-8.
If you are to pass/accept UTF-8 string parameters, use the ANSI
version of the driver and set client_encoding to 'UTF-8'.

> Does the driver work the same way on Win and GNU/Linux regarding
> UNICODE?

Yes.

regards,
Hiroshi Inoue




Re: UNICODE

От
FAU
Дата:
On Wed, 2013-07-10 at 12:27 +0900, Inoue, Hiroshi wrote:
> Hi,
>
> (2013/07/10 1:29), FAU wrote:
> > Hello,
> >
> > I'm trying to understand how (unix)ODBC and psqlodbc work together
> > regarding UNICODE.
> >
> > So from what I understand is that ODBC UNICODE is/was inherently
> > UCS-2LE.
>
> Currently UTF-16LE or UTF-16BE according to the endianness of the
> machine.
>
> > Does the UNICODE driver version (which is psqlodbcw.so I
> > assume) expect/send UCS-2LE or (as I read somewhere) UTF-8, or does it
> > expect/send whatever the back-end database is setup to?
>
> The unicode driver expects UTF-16 not UTF-8.
> If you are to pass/accept UTF-8 string parameters, use the ANSI
> version of the driver and set client_encoding to 'UTF-8'.

What if the back end database is not setup to unicode (e.g. 8859-1 or
whatever) and the odbc client decides to use the wide/utf-16 API
does this work out for the client?  If it does then this would mean that
there would be some conversion along the path (either done by the driver
manager, the driver or the database).

>
> > Does the driver work the same way on Win and GNU/Linux regarding
> > UNICODE?
>
> Yes.
>
> regards,
> Hiroshi Inoue
>
>
>
>




Re: UNICODE

От
Hiroshi Inoue
Дата:
(2013/07/10 13:17), FAU wrote:
> On Wed, 2013-07-10 at 12:27 +0900, Inoue, Hiroshi wrote:
>> Hi,
>>
>> (2013/07/10 1:29), FAU wrote:
>>> Hello,
>>>
>>> I'm trying to understand how (unix)ODBC and psqlodbc work together
>>> regarding UNICODE.
>>>
>>> So from what I understand is that ODBC UNICODE is/was inherently
>>> UCS-2LE.
>>
>> Currently UTF-16LE or UTF-16BE according to the endianness of the
>> machine.
>>
>>> Does the UNICODE driver version (which is psqlodbcw.so I
>>> assume) expect/send UCS-2LE or (as I read somewhere) UTF-8, or does it
>>> expect/send whatever the back-end database is setup to?
>>
>> The unicode driver expects UTF-16 not UTF-8.
>> If you are to pass/accept UTF-8 string parameters, use the ANSI
>> version of the driver and set client_encoding to 'UTF-8'.
>
> What if the back end database is not setup to unicode (e.g. 8859-1 or
> whatever) and the odbc client decides to use the wide/utf-16 API
> does this work out for the client?

Yes as long as the client passes valid strings for the database.

 > If it does then this would mean that
> there would be some conversion along the path (either done by the driver
> manager, the driver or the database).

Yes the driver does the conversion between UTF-16 and UTF-8 and
the PG database does the conversion between UTF-8 and the database
encoding. Though the PG database provides the conversion functionality
between the client encoding and the server encoding, it doesn't
support UTF-16 unfortunately.

regards,
Hiroshi INoue