Umlaute in der Datenbank
-
Ich habe eine MySQL Datenbank in Betrieb. Ich greife über Java/JDBC auf die Datenbank zu.
Wenn ich da zB das Wort INSERT INTO table (name) VALUES ('Körner'); in eine Tabelle eintrage, dann erscheint bei der Abfrage über SELECT * FROM table; in der Konsole(!) folgendes: "K?rner". Wenn ich das dann aber mit Java abfrage, dann erhalte ich wieder Körner.
- Wie kommt das ?
- Ist es also egal wie ich Strings von Java aus in die Datenbank schreibe? Und wieso wird das in der Konsole mit einem "?" dargestellt ?
- Kann das zu Problemen führen ?
-
Wahrscheinlich hat deine console nen anderen zeichensatz
Was zu Problemen führen kann ist sowas einzufügen:
it's nice hereINSERT INTO table (name) VALUES ('it's nice here');
PreparedStatements. die schützen auch gegen SQL Injection
-
Aha, SQL Injection. Bei mir werden hauptsächlich Texte von einer Weboberfläche in die Datenbank geschrieben. Dann reicht es doch aus, wenn ich folgende Zeichen "entschärfe": ' ; \
Dann dürfte doch schon nichts mehr passieren können, oder ?
Gibt es schon ein vorgefertigte Methode in Java die das kann ?
Wieso schützen PreparedStatements vor SQL Injections, werden da die kritischen Zeichen ( ';\ ) durch die setXXX Methoden rausgefiltert ?
-
PreparedStatements filter die zeichen nicht raus, sondern geben sie so (escapped oder sonst wie) an die db weiter, dass die sql statements nicht beeinflusst werden und die zeichen trotzdem richtig in der db stehen.
http://de.wikipedia.org/wiki/SQL-Injektion