phpMyAdmin: Umlaute mit UTF8 in die Datenbank eintragen *gelöst*

theHacker

sieht vor lauter Ads den Content nicht mehr
Teammitglied
ID: 69505
L
20 April 2006
22.682
1.316
Ehrlich blick ich grade ned, was ich noch übersehen habe könnte :-?

Folgendes: Ich möchte in eine MySQL-Tabelle via phpMyAdmin Daten eintragen (ja, wer hätte es gedacht :ugly:). Dabei sind auch Umlaute. Wenn ich mit meinem PHP-Script die Daten dann wieder auslese, krieg ich statt der Umlaute die lustigen Fragezeichen-Symbole.
  • Im phpMyAdmin steht auf der Übersichtsseite:
    MySQL-Zeichensatz: UTF-8 Unicode (utf8)
    Zeichensatz / Kollation der MySQL-Verbindung: ut8_general_ci
  • phpMyAdmin-Config hat
    PHP:
    $cfg['DefaultCharset'] = 'utf-8';
  • Wenn ich mir im phpMyAdmin anzeige, welche Codierung der Browser verwendet, krieg ich UTF8
  • Meine MySQL-Datenbank, die betreffende Tabelle und das Feld sind auf Charset utf8_general_ci
  • Codierung meines PHP-Scripts und dessen Ausgabe ist UTF-8
Ich weiß nimmer, was ich noch übersehen/falsch gemacht haben kann.
Folgendes hab ich ausprobiert:
  • Nach dem Auslesen der Daten hab ich im PHP-Script einfach
    PHP:
    $row['field'] = utf8_encode($row['field']);
    gemacht. Daraufhin waren die Umlaute in der Ausgabe korrekt.

    :arrow: Also der Beweis, dass meine Daten gar nicht mit UTF-8 aus der DB raus sind.
  • Ich hab dann in meinem (UTF-8 kodierten) PHP-Script eine Zeile
    PHP:
    $db->querf("INSERT INTO table (field) VALUES ('foööo')");
    eingebaut, um einen zusätzlichen Eintrag in meine Tabelle zu schreiben. Die Ausgabe dieser Zeile war auch ohne utf8_encode() korrekt. Im phpMyAdmin wurde diese Zeile als "foööo" angezeigt.

    :arrow: Definitiv arbeitet phpMyAdmin nicht mit UTF-8, d.h. phpMyAdmin baut den Mist.
Wie krieg ich das auf die Reihe ?
 
schau doch mal ob phpMyAdmin die Zeichenkodierung der Seite wirklich auf UTF8 stellt oder ob es das config-Element einfach ignoriert


Edit:
Nach dem Auslesen der Daten hab ich im PHP-Script einfach
PHP:
$row['field'] = utf8_encode($row['field']);
gemacht. Daraufhin waren die Umlaute in der Ausgabe korrekt.
Also ich glaube ich habe zu lange geschlafen oder? ^^
Weil wenn du utf8_encode schreibst wird die Zeichenkette doch in utf_8 kodiert, solltest du nicht utf8_decode schreiben um zu überprüfen ob es korrekt war? vllt bin ich auch einfach gerade nur total daneben^^

Edit2: mir istda eben was eingefallen, die MySQL-Verbindung hat ja auch noch ne Zeichenkodierung, hast du diese auch schon auf UTF8 gestellt?
Ansonsten: Connection Character Sets and Collations
 
Zuletzt bearbeitet:
Edit2: mir istda eben was eingefallen, die MySQL-Verbindung hat ja auch noch ne Zeichenkodierung, hast du diese auch schon auf UTF8 gestellt?
Ansonsten: Connection Character Sets and Collations
phpMyAdmin hat das gemacht... aber ich beim Auslesen ned :wall: :wall:

Des Rätsel's Lösung:
PHP:
$db->queryf("SET NAMES 'utf8'");
vor die Anweisungen, die aus der Datenbank lesen. Das wars. phpMyAdmin hat natürlich korrekt funktioniert.