UTF-8 in MySQL
knasterbax
- datenbank
Aloha!
Wenn ich in phpMyAdmin definiere dass eine Tabelle UTF8-Text enthält und sie dann auslese und im Browser ausgebe, werden die Sonderzeichen nicht oder falsch dargestellt.
Was mach ich da falsch?
Ich weiss dass ich die Ausgabe auch mit utf8_encode() machen könnte, aber das ist eher Symptombekämpfung...
你好 knasterbax,
Was mach ich da falsch?
In Anbetracht deiner schlechten Fehlerbeschreibung und dem beträchtlichen
Mangel an Informationen ist das leider nicht beantwortbar.
再见,
克里斯蒂安
Sag mir was du wissen musst!
Collation ist auf utf8_general_ci, Type auf Text.
Sonderzeichen wie üäö werden als � dargestellt.
Moin!
Sag mir was du wissen musst!
Was kommt im Browser an? Zeichenencoding-Angabe in HTML _UND_ (viel wichtiger) in HTTP korrekt? Du hast hier mit zwei Systemen zu tun, erstens dem Browser, der die falsche Darstellung letztendlich zu verantworten hat, und erst in zweiter Linie die Datenbank und dein PHP-Skript. Beide können es versauen, aber der Browser muß als erstes ausgeschlossen werden, ansonsten wäre jede Fehlerdiagnose unmöglich.
Collation ist auf utf8_general_ci, Type auf Text.
Sonderzeichen wie üäö werden als � dargestellt.
Sieht mir irgendwie nicht so aus, als ob der Browser UTF-8 abkriegt.
- Sven Rautenberg
Danke für eure Bemühungen!
Es war aber ganz anders:
phpMyAdmin nimmt als StandardCharset utf8 zum importieren.
Ich hab das dann auf Latin 1 geschaltet und jetzt gehts.
Obwohl die Ausgabe schlussendlich auch utf8 ist...
echo $begrüßung;
Wenn ich in phpMyAdmin definiere dass eine Tabelle UTF8-Text enthält und sie dann auslese und im Browser ausgebe, werden die Sonderzeichen nicht oder falsch dargestellt.
MySQL 4.1 hat viele Stellen, an denen man an den Zeichensatz und Kollation betreffende Werte einstellen kann. Im Handbuch gibt es ein ganzes Kapitel, das sich damit beschäftigt: Chapter 10. Character Set Support.
Da wären als erstes globale Servereinstellungen, die die Default-Einstellungen für Client-Befehle, String-Literale ohne character set introducer[*], Rückgabewerte, Datenbank und Server - und das alles einzeln - angeben. Diese my.ini-Parameter fangen alle mit character_set_ an. Daneben gibt es auch noch die Einstellungen für die collation_*-Werte. (Handbuch: 5.3.3. Server System Variables)
Als nächstes kann man jeder Datenbank, jeder Tabelle darin und für jedes einzelne (Char,Varchar,Text-)Feld eine Zeichensatz- und Kollationseinstellung vornehmen. Die ist allerdings nur intern zum Abspeichern relevant. Das was von und zu einem Client übertragen wird, wandelt MySQL von und in die für die jeweilige Verbindung gültige Kodierung. Diese kann man beispielsweise mit SET NAMES 'x' für alle drei sitzungsrelevanten Parameter (character_set_client, character_set_results, character_set_connection) ändern, wenn man die globale Default-Einstellung (siehe oben) nicht mag. (Handbuch: 10.3.6. Connection Character Sets and Collations)
echo "$verabschiedung $name";
[*] Ein character set introducer ist ein vor einem String vorangestelltes _utf8 oder _latin1 etc.
INSERT ... VALUES (_utf8'utf8-string', _latin1'latin1-String');