Thread: pgsql, java and accents

pgsql, java and accents

From
Fernando Lozano
Date:
Hi there!

Running Red Hat Linux 7.1 and PostgreSQl 7.1.3 installed fomr the PGDG
rpms availabe at postgresql.org. My Java apps (using IBM Java SDK 1.3.0)
works fone with the database, but all accented characters (á, ã ó, ç,
...) get garbaged.

 From psql I can insert and see the acents but Java cannot insert or
read the accents. Is this a bug of the driver or something I can fix
with a simple configuration? I've alread read posggresql manual and
found nothing. :-(


[]s, Fernadno Lozano



Re: pgsql, java and accents

From
Tom Lane
Date:
Fernando Lozano <fsl@centroin.com.br> writes:
> Running Red Hat Linux 7.1 and PostgreSQl 7.1.3 installed fomr the PGDG
> rpms availabe at postgresql.org. My Java apps (using IBM Java SDK 1.3.0)
> works fone with the database, but all accented characters (�, � �, �,
> ...) get garbaged.

>  From psql I can insert and see the acents but Java cannot insert or
> read the accents. Is this a bug of the driver or something I can fix
> with a simple configuration?

I believe the JDBC driver is sensitive to the character set encoding
reported by the database, because it will try to convert encodings to
what Java wants.  psql on the other hand is probably just passing the
characters through without any munging.

Try psql -l to see what encoding is reported.  You may need to drop and
recreate the database if it's the wrong encoding.

            regards, tom lane

Re: pgsql, java and accents

From
Fernando Lozano
Date:
Hi there!

Found the cause and I guess many people will be surprised. I found the
info on the JDBC 2.0 conformance tests at jdbc.postgresql.org.

It looks that recent versions of PostgreSQL, if compiled without
multi-byte characters suport (as are the RPM packages) will *allways*
respond to the JDBC driver it's working on US7_ASCII. That's why I could
not read nor write accents from Java, only from psql. Java was told to
use 7-but ASCII.

The workaround is described on the same doc: you have to append
"?charSet=ISO8859-1" to the connectionURL (or pass it as properties).
Actually the doc suggested UTF-8 but it didn't worked for me. ISO8859-1
worked fine.

Hope this helps other non-english speakers like me. :-)


[]s, Fernando Lozano