Falsche Ausgabe des Zeichensatzes

O

oli0602

MySQL v5.5.8. Falsche Ausgabe des Zeichensatzes in der Datenbankanwendung

Hallo Leute,

ich denke mein Problem gibt es des Öfteren aber dennoch habe ich bisher weder hier, noch in anderen Foren eine Lösung gefunden. Vielleicht ist auch der Denkansatz einfach der Falsche. Mal schauen.

kurz die relevanten Infos:
  • MySQL-Datenbank v5.5.8
  • utf8_general_ci - Zeichensatz
  • Ex-/Import mittels phpMyAdmin
  • Datenbankanwendung mit Hilfe von PHP realisiert

Folgendes Problem:

Ich habe meine Datenbank namens "Datenbank" per phpMyAdmin von meiner MySQL-Datenbank v5.5.8 exportiert. Innerhalb des Dumps werden alle Umlaute im Editor richtig angezeigt. Alle Relationen und die Datenbank selber hatten utf8_general_ci als Zeichensatz.

Nun habe ich den erstellten Dump wiederum per phpMyAdmin in eine andere MySQL-Datenbank v5.5.8 importiert. Auch dort sind alle Relationen und die Datenbanken selber mit dem Zeichencode utf8_general_ci "formatiert". Auch der Kollation habe ich utf8_general_ci zugeweisen. Soweit so gut. Alle Umlaute sehen da auch ganz gut aus.

Nun zum spannenden Teil: Auf die Datenbank setzt eine Datenbankanwendung auf. Diese besteht aus PHP-Seiten, ebenfalls mit dem Zeichensatz utf8_general_ci angegeben. Bei der "alten" Datenbank wurden mir die Umlaute wie gewünscht angezeigt. Nun leider nicht mehr. Obwohl ich weder an den Zeichensätzen in der MySQL-Datenbank noch an den PHP-Seiten herumgespielt habe.

Probierte Lösungsansätze:
  • SQL-Dump mit dem Editor als utf8 abgespeichert und neu importiert: Fehlanzeige
  • Importiert mit latin1 als Zeichensatz: Fehlanzeige
  • Importiert mit ascii als Zeichensatz: Fehlanzeige
  • Dump in Netbeans geöffnet und als utf8 abgespeichert. Danach wieder import mit utf8-Angabe: Fehlanzeige
Dazu sollte ich vlt. erwähnen, dass die utf8-codierte Dump in Netbeans die Umlaute nicht richtig anzeigt und dafür aber die ANSI-codierte Dump in Netbeans richtig angezeigt wird.

Was habt ihr denn noch für Vorschläge? Ich weiß, dass es auch mit ISO-Formatierungen etc. gehen sollte, aber warum nicht auch unter utf8

Grüße
oli
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

du scheinst hier einige wesendliche settings der datenbank zu vermischen.

du hasst einerseits die collation der spalte (utf8_bin oder whatever). Diese collation gibt aber lediglich an in welchem format das ganze intern gespeichert wird, und welcher "wertebereich" zulässig ist. Es hat nichts damit zu tun was der client liefern muss, oder bekommt.

und dann gibt es das client charset, das connection charset, und noch n paar andere.

Für dich hier wichtig ist das client charset. MySQL convertiert die daten aus feldern automatisch in das character_set_client, und zwar fast komplett unabhängig von der collation.
Beim inserten von datensätzen, wird ebenfalls das client encoding als ausgangsbasis verwendet für die convertierung.

Machst du also einen dump von einer tabelle, lohnt es sich sicherzustellen, dass die character set informationen mit enthalten sind (--set-charset), so dass diese beim wiedereinspielen korrekt an das format des dumps angepasst werden. (die option ist default in aktuellen versionen von mysql, das war aber nicht immer so!)

Beim abfragen stellt sich natürlich das selbe problem:

In PHP gibt es die funktion mysql_client_encoding die dir das aktuelle encoding zurück liefert.

ändern kannst du das client charset mit
SQL:
SET CHARACTER_SET_CLIENT = 'utf8';
 
Zuletzt bearbeitet von einem Moderator:
Super hat funktioniert. Ich gebe bei jeder Aufnahme der Datenbankverbindung mittels:

PHP:
mysql_set_charset ( 'utf8', $connectionid );

den zu verwendenden Zeichensatz mit. Tatsächlich war bisher "latin1" eingestellt.

Danke und erledigt!
 
Zurück