UTF-8 aus mySQL Tabelle

Athropos

Grünschnabel
Servus!

Ich habe folgendes Problem und bin leider bislang noch auf keine Lösung gekommen.

Aus einem (utf8_general_ci) Textfeld (TEXT oder VARCHAR) lese ich mittels mysql_connector den Inhalt (dieser enthält div. UTF-8 Zeichen).

Nur, Java zeigt mir diese Sonderzeichen (auch einfach nur Umlaute) nicht korrekt an :(

Befüllt wird das Tabellenfeld mittels einer PHP-Applikation, von dieser Seite aus ist imho auch alles in Ordnung (sprich dort funktionert das Auslesen und Darstellen problemlos, ich setze auch das mySQL Charset brav auf UTF-8 etc.)

Irgendwelche Tipps oder Ideen von eurer Seite? (Umwandlung via Byte[] funktioniert leider nicht).

thx & lG,
Athropos

PS@Mods: ich hoffe, ich bin im richtigen Unterforum gelandet.
 
Ich hab da noch ein paar Fragen :)

Wie stellt du die Verbindung zur Datenbank her? Wie liest du den UTF-8 String aus der Datenbank aus und wie überprüfst du ob er korrekt codiert ist?

Code-Ausschnitte zu den Fragen wären schön.
 
Servus!

ad1) JDBC mit dem mysql-connector (v5.1.10)
Code:
String url = "jdbc:mysql://127.0.0.1:3306/database?connectionProperties='useUnicode=true;connectionCollation=utf8_general_ci;characterSetResults=utf8'";

ad2) "normale" SELECT Query die dann in ein ResultSet übergeben wird (rs.getString("dbfeld"))

ad3) eigentlich gar nicht, wenn ich allerdings in eine Bytearray umwandle und daraus einen String mache (jeweils mit angegebener Zeichenkodierung) kommt dasselbe Ergebnis raus.

java.nio.charset.Charset.defaultCharset());
und
System.getProperty("file.encoding"));
geben ebenfalls UTF-8 aus

Und der komplette Code (nachdem ich den String atm nur mittels System.out.println ausgebe: die Konsole zeigt UTF-8 korrekt an)

Code:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class UtfTest {		
   public static void main(String args[]) {	   
	  Connection c;
	  String name = ""; 
	  String pass = "";
	  String url = "jdbc:mysql://127.0.0.1:3306/database?connectionProperties='useUnicode=true;connectionCollation=utf8_general_ci;characterSetResults=utf8'";

	  String query = "SELECT field FROM table WHERE ID = 'X'";	   	   
	  try {
		  	String returnValue = "noresult";		
			Class.forName("com.mysql.jdbc.Driver");
			c = DriverManager.getConnection(url, name, pass);
			Statement s = c.createStatement();			
			ResultSet rs = s.executeQuery ( query );					    		
			while (rs.next()) {				
				returnValue = rs.getString("field");
			} // end while  
          System.out.println(returnValue);         
       } catch (Exception e) {
          System.out.println(e);
       }              
   }
}
 
Servus!

Bin soeben auf den Fehler draufgekommen. Ich hatte in PHP (noch als Relikt, bevor ich bei der Initialisierung des Datenbankzugriffs das Charset auf UTF-8 gestellt hatte) mit den Methoden utf8_decode() und utf8_encode() gearbeitet, dadurch waren die "falschen" Sonderzeichen in der Datenbank.

lG, Athropos
 
Zurück