PHP &MySQL utf8 Probleme

DefconDev

Commander
Registriert
Jan. 2008
Beiträge
2.540
Hallo zusammen,

ich habe kleinere csv Dateien in PHP Admin importiert, die Zeichenkodierung ist auf utf-8 eingestellt.
Die Kollation ist auf utf8_general_ci für die jeweiligen Tabellen.

Server Zeichensatz: UTF-8 Unicode (utf8)
Zeichensatz/Kollation der MySQL-Verbindung: latin1_german1_ci

Wenn ich eine Datenbank abfrage per PHP durchführe, werden 4 von 4 Tabellen ausgegeben. Also alles so wie es soll, bis auf die Tatsache dass die deutschen Umlaute mit Fragezeichen ausgefüllt werden.
Sobald ich im PHP-Code die Zeile hinzufüge:

PHP:
mysql_query("SET NAMES 'utf8'");

oder sogar

PHP:
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");



Werden nur noch zwei Tabellen ausgegeben, die Umlaute zwar korrekt aber die anderen beiden Tabellen nicht. Jede Tabelle hat ein paar deutsche Umlaute eingebaut. Ich kann mir aber absolut nicht erklären warum nur zwei ausgegeben werden.


Einer von euch eine Idee woran es liegen könnte?
 
Es geht um den Tabelleninhalt. Da ändere ich bestimmt nicht jeden Datensatz der ein Umlaut besitzt.
 
Wie sehen die Umlaute denn im phpMyAdmin aus? Passt da alles? Theoretisch ist es schon richtig, Datenbank, Tabellen und Verbindung alle auf "UTF-8" bzw "utf8_general_ci" zu setzen.

Ansonsten kann es natürlich noch am HTML-Dokument liegen, in dem dann die Zeichen dargestellt werden - hat das als Charset UTF-8?
 
Also die CSV daten habe ich als ISO-8859-1 abgespeichert. Beim Import gebe ich diesen Zeichensatz auch an. In PHPadmin werden die Datensätze auch alle korrekt dargestellt.

Wenn ich jetzt mit PHP mysql_query("SET NAMES 'utf8'"); die Datenbank abfrage, werden zwei Tabellen korrekt dargestellt und zwei andere nicht.

Der Content wird auf einer Joomla Seite dargestellt.
 
Ok, habe das Problem jetzt halbwegs lösen können.

Anscheinend haben die Spalten-namen eine andere Char-Codierung als der Inhalt. Zumin. wenn ich die Umlaute der Spaltenname ändere, funktionieren die Abfragen.
 
Gewöhn dir an, Spaltennamen (und andere systemrelevante Variablen) in englisch zu bezeichnen. Dann hast du nur den grundlegenden ASCII-Satz und stolperst nie über solchen Unsinn.
 
Zurück
Oben