JDBC Umlaute werden nicht dargestellt

Hallo,

ich habe ein Problem mit der Darstellung von Umlauten in postgres mit Java.
Unter Google habe ich schon einiges gefunden, aber nichts hat geholfen.

Ich verwende die Windows-Version postgresql-8.2.3-1, den JDBC-Treiber postgresql-8.2-504.jdbc3.jar und die Javaversion 1.5.

Unter der Konsole klappt alles mit Umlauten. Ich lege eine DB mit charset LATIN1 an:
createdb mydb -E LATIN1.

Tabelle anlegen:
create table test (val1 varchar(100));

Wert einchecken:
insert into test values(‘Gewässer’);

mit
select * from test
bekomme ich als Ausgabe auch “Gewässer”. Soweit so gut. Mit java klappt das ganze dann aber nicht mehr, die Umlaute werden nicht dargestellt.

Mein Programm sind so aus:

String url = “jdbc:postgresql://localhost/mydb?charSet=LATIN1”;
//alternativ auch
//String url = “jdbc:postgresql://localhost/mydb?charSet=ISO-8859-1”;

try {
DriverManager.registerDriver(new org.postgresql.Driver());
// Bei … ist das Passwort einzusetzen.
Properties p = new Properties();
p.put(“user”, “xxx”);
p.put(“password”, “xxx”);
p.put(“charSet”, “LATIN1”);
//alternativ auch
//p.put(“charSet”, “ISO-8859-1”);

Connection conn = DriverManager.getConnection(url, p);
Statement stmt = conn.createStatement ();
ResultSet rset =
stmt.executeQuery(“SELECT * FROM test”);
while (rset.next()) {
System.out.println("DB-Ausgabe: " + rset.getString(“val1”));
}

System.out.println(“Test-Ausgabe: Gewässer” );
} catch (SQLException e) {
System.out.println(e);
}



Die Ausgabe ist dann:
DB-Ausgabe: Gew?sser
Test-Ausgabe: Gewässer


Ich habe auch schon versucht, das charSet nur über URL oder nur über Properties anzugeben…hilft aber alles nichts.

Für Hilfe wäre ich sehr dankbar!!

Gruß,
Patrick

Vorweg: ich nix windoze und auch nix Java.

Ich habe auch schon versucht, das charSet nur über URL oder nur über Properties anzugeben…hilft aber alles nichts.

Für Hilfe wäre ich sehr dankbar!!

Gruß,
Patrick


test=*# set client_encoding=latin1;
SET
Time: 0.734 ms
test=*# select * from umlaut ;
       a
---------------
 abc äöü ß ÄÖÜ
(1 row)

Time: 0.979 ms
test=*# set client_encoding=utf8;
SET
Time: 0.734 ms
test=*# select * from umlaut ;
       a
---------------
 abc ÀöÌ à ÃÃÃ
(1 row)

Time: 1.580 ms
test=*#

Mit anderen Worten: setze vor Deinem SQL mal das ‘set client_encoding=…’, vielleicht kommst du damit weiter.


Andreas

Hallo Patrick,

Ist sicher, dass Java die Zeichen im CharSet “LATIN1” bzw. “ISO-8859-1” sendet bzw. empfängt? Intern arbeitet Java mit dem CharSet “UTF8”!

PostgreSql unterscheidet zwischen CLIENT- UND SERVER-ENCODING. Genaueres kannst man in der Doku nachlesen.



mfg

fristo