Encoding for error messages during connect

From: Thomas Kellerer <spam_eater(at)gmx(dot)net>
To: pgsql-jdbc(at)postgresql(dot)org
Subject: Encoding for error messages during connect
Date: 2011-11-05 11:12:31
Message-ID: j935mi$ub7$1@dough.gmane.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

Hi,

when the server is set to e.g. lc_messages = 'German_Germany.1252' then error messages during connect are not properly decoded by the driver (or encoded by the server?)

At least when the passwort is incorrect the german error message

Passwort-Authentifizierung für Benutzer »thomas« fehlgeschlagen

is incorrectly received by the driver as

Passwort-Authentifizierung f?r Benutzer ?thomas? fehlgeschlagen

After debugging the driver I found out that the driver creates the stream for the startup communication using US_ASCII encoding which will yield incorrect characters beyond ASCII 127.

I debugged the data that is received from the server and that proofed that the message is received as a single byte encoding. Which seems correct as 'German_Germany.1252' is indeed a single byte encoding.

I changed the stream that the driver uses during connect to use a different encoding, by changing org.postgresql.core.v3.ConnectionFactoryImpl and adding the line

newStream.setEncoding(Encoding.getDatabaseEncoding("ISO-8859-1"));

after Line 77 (where newStream = new PGStream(host, port) is done)

And in that case the error message is decoded properly by the driver.

Now I don't think it would be possible for the driver to find out which encoding to use for that stream before actually having a connection. So it would need to evaluate some kind of client side information, e.g. the lc_messages environment variable on the client or through a connection property that would then be used to initialize the stream correctly.

Personally I'd prefer a connection property (something like "messageEncoding") to control this as this can be part of the JDBC URL which is usually configurable in a Java environment.

What do you think?

Regards
Thomas

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Timbo Chen 2011-11-10 04:44:12 parameterized query much much slower than one with hard-coded string
Previous Message Johann 'Myrkraverk' Oskarsson 2011-11-05 07:27:42 Re: Fwd: Re: [BUGS] BUG #6253: JDBC driver: getIndexInfo() returns quotes around quoted column names