MySQL Koreanische Schriftzeichen in MySQL Datenbank schreiben

sonyejin

Mitglied
Hallo zusammen,

zunächst einmal ein großes Lob an dieses Forum... war bislang nur stiller Mitleser und habe hier viele interessante Informationen und Lösungsvorschläge erhalten.

ich stehe nun auch vor einem Problem und weiss nicht weiter ( die Suchfunktion hat mir leider auch nichts gescheites ausgespuckt) und bitte daher um eine Hilfestellung :

Ich will über ein Java - Programm koreanische Schriftzeichen mittels PreparedStatements auf eine MySQL Datenbank schreiben... klappt auch soweit... Problem ist nur, dass die Zeichenkodierung fehlschlägt und ich nur ??? zu sehen bekomme... die Datenbank selber ist auf EUC-KR eingestellt und wenn ich direkt über einen SQL - Editor einen koreanischen Datensatz einfüge, dann wird dieser auch korrekt dargestellt.. über mein Java - Programm leider nicht... in Elipse selber werden die Zeichen ebenfalls korrekt angezeigt, wenn ich sie mir auf der Konsole ausgeben lasse... kann mir jemand helfen?

Danke im Voraus
 
Ich will über ein Java - Programm koreanische Schriftzeichen mittels PreparedStatements auf eine MySQL Datenbank schreiben... klappt auch soweit... Problem ist nur, dass die Zeichenkodierung fehlschlägt und ich nur ??? zu sehen bekomme... die Datenbank selber ist auf EUC-KR eingestellt und wenn ich direkt über einen SQL - Editor einen koreanischen Datensatz einfüge, dann wird dieser auch korrekt dargestellt.. über mein Java - Programm leider nicht... in Elipse selber werden die Zeichen ebenfalls korrekt angezeigt, wenn ich sie mir auf der Konsole ausgeben lasse... kann mir jemand helfen?
Wie stellt dein Java Proramm denn die Einträge dar?
 
Hallo Maki,

ich hoffe, dass ich deine Frage richtig verstehe :

Mittels eines HTML - Parsers werden koreanische Zeichen in eine Arraylist<String> gespeichert... wenn ich diese zu Testzwecken ausgebe ( via System.out.println ( Arraylist.get(Index) ) werden die Einträge in der Konsole korrekt angezeigt.
 
Hallo,

bei der Darstellung von Zeichen z. B. in einem JLabel, muß man aufpassen, ob die Schrift, die für dieses JLabel verwendet wird auch das Zeichen darstellen kann. Ansonsten sieht man meist nur so ein komisches viereckiges Kästchen.
Die Klasse Font hat die Methoden .canDisplay() und .canDisplayUpTo().
Teste mal damit, ob die verwendete Schrift überhaupt koreanische Schriftzeichen enthält.

MfG
hansmueller
 
zunächst einmal danke für deine antwort hansmueller... allerdings ist der Lösungsvorschlag schon viel zu weit gedacht, weil ich noch gar keine GUI habe... mein Hautproblem besteht echt darin, dass die Datenbank einfach keine koreanischen Schriftzeichen aufnimmt...

ich habe jetzt folgende Sachen probiert :

1. Simple Insert Anweisung in Java geschrieben mit hart gecodeten Werten ---> ??? erscheinen in der Datenbank. Ich hatte daher die Befürchtung, dass Eclipse einfach keine koeranischen Zeichen erkennt... dem war aber nicht der Fall. Ich habe einem String ein koreanisches Zeichen zugewiesen und ausgegeben : Wird korrekt dargestellt. Wenn ich die sql Anweisung ausgebe, werden die koreanischen Schriftzeichen ebenfalls korrekt dargestellt.

2. Wenn ich direkt über den sql -editor bei myphpadmin Datensätze mit koreanischen Zeichen einfüge, werden diese auch korrekt dargestellt.

Daher meine Schlussfolgerung : MySQL Datenbank ist richtig konfiguriert... Elipse kommt mit der Kodierung während des Schreibens nicht klar... aus welchem Grund auch immer... bin langsam am Verzweifeln
 
Hallo,

kannst du die Datenbank nicht einfach auf UTF-8 einstellen?
EUC-KR soll schon etwas aus der Mode sein (Quelle: Wikipedia).

Und mit UTF-8 sollte Java keine Probleme haben.

MfG
hansmueller
 
@hansmueller: Danke für den Hinweis... ich hatte es auch auf UTF-8 umgestellt, was leider nichts gebracht hat... bevor ich dann nach langer Google Suche auf die Lösung gestoßen bin :

Man kann der JDBC connection noch parameter übergeben ... so hats bei mir nun geklappt :

jdbc:mysql://localhost/meineDB?useUnicode=yes&characterEncoding=UTF-8 :applaus:

Ich bedanke mich für trotzallem für die Lösungsvorschläge :toll:
 
[DUKE]url += "?connectionCollation=utf8_general_ci";[/DUKE]

Java:
			String url = "jdbc:mysql://" + Server + "/" + Datenbank;
			url += "?connectionCollation=utf8_general_ci";
			System.out.println("Verbindung zur DB via '" + url + "'");
			connection = DriverManager.getConnection(url, Benutzer, Passwort);
			System.out.println(" - Verbindung hergestellt");

Edith: warst schneller 🙂
 
trotzdem danke @ mogel 😀

Ich habe den Thread aber wieder "geöffnet", weil ich schon wieder Probleme mit den Schriftzeichen habe :shock:

Allerdings habe ich nun keine Probleme mehr mit dem Schreiben in die Datenbank...dafür aber ein anderes Problem und ich weiss ehrlich gesagt auch nicht, ob es zum Thema "Datenbankprogrammierung" gehört... wenn ein Mod meint, dass es hier nicht hingehört, dann bitte verschieben , Danke.

Folgendes Problem :

Ich habe eine Methode in einer Bean geschrieben ( public Vector<Player> getPlayer(String suche) ) , die via einer Select Anweisung nach einem bestimmten Namen sucht ( SELECT * from soundso WHERE name=' "+suche +" ' ) .... diese Methode wird in der jsp aufgerufen und der Suchstring wird über ein Textfeld ( <input type text ) übergeben....

das Problem ist nun, dass der koreanische Suchstring "gebrochen" dargestellt wird und die select-anweisung damit nichts anfangen kann ... wenn ich in die Methode direkt nen koreanischen Suchbegriff reinschreibe, klappt es einwandfrei... es klappt also nur nicht über das Textfeld
 
Mit "gebrochen" meinte ich kryptisch ... statt koreanischer Zeichen werden irgendwelche Sonderzeichen ( so in etwa :" ë¥?í??ì§? " ) dargestellt, aber ich kann mit Freude mitteilen, dass ich nach langem "Durchprobieren" die Lösung gefunden habe :

Das Hinzufügen der Zeile " request.setCharacterEncoding("UTF-8");" in die JSP UND die Änderung der Form method von "GET" in "POST" haben es zum Laufen gebracht... ich habe zwar keine Ahnung, warum es nur so funktioniert , aber Hauptsache es funktioniert nun :bahnhof:

Vielleicht kann mir ja trotzdem jemand erklären, warum es so klappt
 
Versuch es mal mit einem PreparedStatement anstatt Strings zu einem Querystring zusammen zuverketten.
 

Neue Themen


Zurück
Oben