Ich verwende Java und die JdbcTemplate-Klasse von Spring, um eine SQL-Abfrage in Java zu erstellen, die eine Postgres-Datenbank abfragt. Ich habe jedoch Probleme bei der Ausführung von Abfragen, die fremde/akzentuierte Zeichen enthalten.
Zum Beispiel der (gekürzte) Code:
JdbcTemplate select = new JdbcTemplate( postgresDatabase );
String query = "SELECT id FROM province WHERE name = 'Ontario';";
Integer id = select.queryForObject( query, Integer.class );
wird die Provinz-ID abrufen, aber wenn ich stattdessen name = 'Québec'
dann gibt die Abfrage keine Ergebnisse zurück (dieser Wert befindet sich in der Datenbank, das Problem ist also nicht, dass er fehlt).
Ich glaube, die Ursache des Problems ist, dass die Datenbank, die ich verwenden muss, die Standard-Client-Kodierung auf SQL_ASCII eingestellt hat, was laut este verhindert automatische Zeichensatzkonvertierungen. (Die Java-Umgebungscodierung ist auf "UTF-8" eingestellt, während mir gesagt wurde, dass die Datenbank "LATIN1" / "ISO-8859-1" verwendet)
Ich konnte die Kodierung manuell angeben, wenn die resultSets Werte mit fremden Zeichen enthielten, um ein früheres Problem ähnlicher Art zu lösen.
Ex:
String provinceName = new String ( resultSet.getBytes( "name" ), "ISO-8859-1" );
Aber jetzt, da die fremden Zeichen Teil der Abfrage selbst sind, war dieser Ansatz nicht erfolgreich. (Ich nehme an, da die Abfrage vor der Ausführung ohnehin in einem String gespeichert werden muss, verwirrt das Aufteilen in Bytes und anschließende Ändern der Kodierung die Zeichen nur noch mehr).
Gibt es eine Möglichkeit, dieses Problem zu umgehen, ohne die Eigenschaften der Datenbank zu ändern oder sie neu zu erstellen?
PostScript: Ich fand diese Funktion auf StackOverflow bei der Erstellung eines Titels, es schien nicht zu funktionieren (vielleicht habe ich es nicht richtig verwendet, aber selbst wenn es funktioniert hat, scheint es nicht die beste Lösung zu sein):
Edit: Ich habe meine eigene Antwort ausgewählt, da ich sie vorerst verwenden werde; wie jedoch in einem Kommentar unten erwähnt, bin ich gerne bereit, andere Vorschläge zu prüfen, die möglicherweise besser sind, solange ich Zugang zur Datenbank habe.