UTF 8 mit phpmyadmin einstellen
misterunknown
- datenbank
Moin,
die Homepage die ich gerade programmiere ist UTF-8 codiert. Jetzt habe ich eine Datenbank angelegt, eine Tabelle und einen Datensatz. Beim testweisen auslesen und ausgeben, fiel mir auf, dass die Umlaute nicht korrekt angezeigt werden. Dann habe ich die Datenbank und die Tabelle auf utf8-bin umgestellt, unverändert. Jetzt habe ich es noch mit utf8-general_ci probiert, auch unverändert. Welchen Zeichensatz muss ich nehmen?
Grüße Marco
Lieber misterunknown,
hast Du denn auch brav das hiesige Archiv zu Deiner Frage konsultiert? Ich hatte einst dieselbe Frage, und im Archiv stand eine sehr ausführliche und hilfreiche Antwort. Du findest sie sicher auch.
Liebe Grüße,
Felix Riesterer.
Moin,
hast Du denn auch brav das hiesige Archiv zu Deiner Frage konsultiert? Ich hatte einst dieselbe Frage, und im Archiv stand eine sehr ausführliche und hilfreiche Antwort. Du findest sie sicher auch.
Hab die Lösung mit mysql_set_charset() gefunden. Ist das denn sauber, oder eher ein Wörkaraund, weil theoretisch, müsste es doch auch so funktionieren?
Grüße Marco
Hallo,
Hab die Lösung mit mysql_set_charset() gefunden. Ist das denn sauber, oder eher ein Wörkaraund, weil theoretisch, müsste es doch auch so funktionieren?
Die Frage ist ehr: Was willst du bzw. was sind die Anforderungen?
Möchtest du einen anderen Zeichensatz für deine MySQL Verbindung nutzen (als die Daten in der DB haben), dann ist mysql_set_charset() genau das richtige.
Grüße
Hallo,
Hab die Lösung mit mysql_set_charset() gefunden. Ist das denn sauber, oder eher ein Wörkaraund, weil theoretisch, müsste es doch auch so funktionieren?
Die Frage ist ehr: Was willst du bzw. was sind die Anforderungen?
Möchtest du einen anderen Zeichensatz für deine MySQL Verbindung nutzen (als die Daten in der DB haben),
nein. Wenn man eine andere Zeichencodierung verwenden möchte als die in der Verbindung standardmäßig genutzte ...
dann ist mysql_set_charset() genau das richtige.
und auch dann, wenn man sich nicht darauf verlassen will, dass standardmäßig das eingestellt ist, was man benötigt.
Siehe Wiki, Abschnitt Zeichencodierung/MySQL.
Freundliche Grüße
Vinzenz
Hallo,
Die Frage ist ehr: Was willst du bzw. was sind die Anforderungen?
Möchtest du einen anderen Zeichensatz für deine MySQL Verbindung nutzen (als die Daten in der DB haben),nein. Wenn man eine andere Zeichencodierung verwenden möchte als die in der Verbindung standardmäßig genutzte ...
Aha - es ist also üblich eine andere zu verwenden, als die Kodierung, die die Daten haben?
Und jetzt komm mir nicht mit: Ich habe aber X Verbindungen zu Y Datenbanken, die alle eine unterschiedliche Zeichenkodierung haben und alle über ein PHP Skript abgefragt werden.
Aber du hast Recht, ich bin in Zukunft präziser in meinen Ausführungen.
Grüße
Hi!
nein. Wenn man eine andere Zeichencodierung verwenden möchte als die in der Verbindung standardmäßig genutzte ...
Aha - es ist also üblich eine andere zu verwenden, als die Kodierung, die die Daten haben?
Nein, das hat Vinzenz nicht gemeint. Der konfigurierte Wert für character_set_client, character_set_connection und character_set_results könnte beispielsweise vom Hoster oder Administrator des MySQL-Servers auf latin1 stehen, was auch der Hersteller-Defaultwert ist. Wenn man selbst aber für seine eigenen Daten UTF-8 verwenden möchte, kann man das effektiv nur für die Felder der eigenen Tabellen konfigurieren. Damit hast du aber nur die Datenablage konfiguriert. Für die Verbindung zwischen Client und Server gelten für die drei oben genannten Konfigurationswerte die Default-Werte, wenn du sie nicht explizit und verbindungsindividuell auf utf8 stellst.
Wie MySQL die drei genannten Werten auf einer Client-Verbindung verwendet, lässt sich im Handbuchkapitel Connection Character Sets and Collations nachlesen.
Und jetzt komm mir nicht mit: Ich habe aber X Verbindungen zu Y Datenbanken, die alle eine unterschiedliche Zeichenkodierung haben und alle über ein PHP Skript abgefragt werden.
Das wäre auch ein Szenario, wenngleich ein wohl nicht sehr häufiges. Schon eher trifft man in der real existierenden Welt jedoch an, dass ein phpMyAdmin mit UTF-8 arbeitet und auf die selben Daten eine (noch nicht auf UTF-8 umgestellte) Latin1-Anwendung zugreift.
Lo!
Hi!
Hab die Lösung mit mysql_set_charset() gefunden. Ist das denn sauber, oder eher ein Wörkaraund, weil theoretisch, müsste es doch auch so funktionieren?
Das muss so. Du kannst dir das wie ein Land vorstellen. Da drin wird irgendeine Sprache gesprochen. Willst du aber mit jemandem in diesem Land kommunizieren, müsst ihr euch auf eine Sprache einigen. Das kann deren, deine oder eine dritte Sprache sein. Und dann muss natürlich noch gegebenenfalls zwischen den Sprachen übersetzt werden. Genauso ist das bei MySQL. Die Kodierung der Felder ist die eine Sache, die Kodierung zwischen einem Client und dem Server eine andere. Jeder Client kann theoretisch eine andere Kodierung verarbeiten wollen und muss dies dem MySQL-Server mitteilen, welche das ist. Sonst nimmt Letzter irgendeinen Defaultwert, der unter Umständen nicht mit dem Client übereinstimmt und fertig ist der Zeichensalat. Wie beim Ländervergleich nimmt auch MySQL eine Umkodierung vor, wenn Feldkodierung und Verbindungskodierung nicht übereinstimmt.
Praktisch ist es besser, wenn alle Beteiligten die selbe Sprache sprechen und nicht übersetzen müssen, dann gibt es dabei auch keine Verluste.
Wenn du gerade erst mit der Zeichenkodierungsproblematik anfängst, kannst du dir ja im SELFHTML-Wiki den Themenkomplex zur Zeichencodierung anschauen. Neben der Einleitung, in der auch die Begrifflichkeiten erklärt werden, gibt es noch andere Kapitel, die sich den jeweiligen im Netz beteiligten Systemen widmen. Denn an jeder Schnittstelle muss man auf die richtige Zeichenkodierungsdeklaration und -verwendung achten.
Lo!
Moin,
Wenn du gerade erst mit der Zeichenkodierungsproblematik anfängst, kannst du dir ja im SELFHTML-Wiki den Themenkomplex zur Zeichencodierung anschauen. Neben der Einleitung, in der auch die Begrifflichkeiten erklärt werden, gibt es noch andere Kapitel, die sich den jeweiligen im Netz beteiligten Systemen widmen. Denn an jeder Schnittstelle muss man auf die richtige Zeichenkodierungsdeklaration und -verwendung achten.
Danke für deine Ausführungen ;) Beispiele sind immer gut zum begreifen. Danke auch für den Link.
Grüße Marco
@@Felix Riesterer:
nuqneH
[] eine sehr ausführliche und hilfreiche Antwort. Du findest sie sicher auch.
Und sicher auch heraus, dass weder UTF-8 noch utf8-general_ci ein Zeichensatz ist.
Qapla'