Hallo Altrea, hallo Nobbie,
vielen Dank für eure Hinweise und Denkanstöße.
OK, ich habe mir die Artikel in Wikipedia zu Zeichensätzen und Zeichencodierungen durchgesehen, anschließend noch die Seiten des Referenzhandbuches zu mySQL gelesen.
Außerdem habe ich noch eine Seite entdeckt, auf der genau beschrieben wird, wie man eine Datenbank, eingestellt auf ISO in UTF-8 ändert.
@Nobbie:
Ich weiß, du bist sicher enttäuscht, aber richtig begriffen habe ich das mit den Zeichensätzen immer noch nicht. Vielleicht weil sich dahinter zu viel Logik verbirgt und ich bin leider einer der Menschen, der mit Logik so seine Schwierigkeiten hat. Bin eher der kreative Typ.
Nun ja, ich weiß nun wie Zeichensätze aussehen (bei Wiki war eine Tabelle mit der Belegung des ISO-8859 Zeichensatzes drin) und ich habe auch verstanden, was der Unterschied zwischen ISO und Unicode ist. Leider fehlt mir bei solchen Sachen dann immer die Verbindung dazu, wie mir dieses Wissen bei der Beseitigung meines Problems helfen kann.
ABER:
der Fehler ist nun behoben.
Ich habe folgende Befehle in SQL ausgeführt:
- Code: Select all
ALTER DATABASE `datenbank_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `tabellen_name` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `user_interest` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Im Anschluss wird geraten diesen Befehl noch auf die Tabellen anzuwenden, wobei ich nicht so richtig verstanden habe, wieso:
- Code: Select all
ALTER TABLE `tabellen_name` ADD INDEX `index_name` ( `feld_1` ( 10 ) ) ;
Damit lege ich den Index der Tabelle fest, soviel habe ich begriffen. Aber da der PRIMARY KEY auf das Feld "benutzername" noch besteht, war mir nicht ganz klar, wieso ich das nochmal wiederholen soll. In dem Beispiel mit der Umstellung von ISO auf UTF-8 wurde es gemacht, weil es in den Tabellen mehrere Indexfelder gegeben hat und da dann Probleme auftauchen könnten. Sollte ich den Befehl zur Sicherheit ausführen, obwohl ich nur ein Feld mit einem Index belegt habe? Oder ist der Hintergrund für diesen Befehl ein anderer, nämlich dass hier der Index auf 10 Zeichen begrenzt wird?
Zum Schluss habe ich in meiner connect.php nach dem Öffnen der Datenbankverbindung folgende Codeschnispel eingefügt
- Code: Select all
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
und auch meinen PHP-Code, ganz am Anfang der Datei (noch vor session_start) mit einem
- Code: Select all
header('Content-Type: text/html; charset=utf-8');
versehen. Werde morgen gleich noch testen, ob die Funktion session_start jetzt beeinträchtigt ist, weil ja eigentlich dieser String immer am Anfang einer php-Datei mit SESSION stehen sollte.
Nochmal danke für eure Hilfe. Bis zum nächsten Fehler. Auch wenn ich immer die Hoffnung habe, keine Fehler mehr zu produzieren, werden es denke ich, noch viele sein.
Liebe Grüße
Poison