Codierungsproblem
Alexej V.
- php
Guten Abend!
Habe ein Problem, zu dem ich keine Lösung gefunden habe (vielleicht aber falsch gesucht?)
Vorgeschichte:
Ich habe ein phpBB-Forum und ein Wiki. Nun habe ich für das Wiki eine Funktion geschrieben, die bestimmte Datensätze aus der DB des Forums holt, und das funktioniert auch (was kann es leichteres geben?):
$topic = mysql_query('SELECT topic_id, topic_title FROM phpbb_topics WHERE topic_id ='.$ergeb1['topic_id']);
echo mysql_result($topic,0,0);
Problem:
Russische, Griechische Zeichen und Umlaute werden als ?????? angezeigt.
Sowohl im Forum, wie auch im Wiki gibt es ein "<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />", aber daran liegt es nicht - die Fragezeichen kommen schon vom Server so an...
Danke für eure Hilfe!
Alexej
Grüße,
was ist in der db gespeichert?
MFG
bleicher
Vergessen zu schreiben - im Forum sieht es normal aus.
Und in der DB sind es Normale umlaute und Zeichen, in einem varchar(255), Kollokation: utf8_unicode_ci
Und in der DB sind es Normale umlaute und Zeichen, in einem varchar(255), Kollokation: utf8_unicode_ci
Die Collation hat nichts mit der Codierung zu tun, in welcher die Zeichen in der DB gespeichert sind, Frage nochmal:
In welcher Codierung sind die Zeichen in der DB gespeichert?
Hotti
Hi!
Und in der DB sind es Normale umlaute und Zeichen, in einem varchar(255), Kollokation: utf8_unicode_ci
Die Collation hat nichts mit der Codierung zu tun, in welcher die Zeichen in der DB gespeichert sind,
Die Collation ist immer an eine Kodierung gebunden, denn nur wenn man aus den gespeicherten Bytes das richtige Zeichen interpretiert hat, kann man die richtigen Vergleichsregeln darauf anwenden. Deswegen ist der erste Teil der Kollationsangabe immer eine Kodierungsangabe.
Frage nochmal: In welcher Codierung sind die Zeichen in der DB gespeichert?
Wenn du schon genau fragen willst, solltest du nach der Kodierung der Felder und nicht nach der der Datenbank oder der Tabelle fragen.
Lo!
hi,
Wenn du schon genau fragen willst, solltest du nach der Kodierung der Felder und nicht nach der der Datenbank oder der Tabelle fragen.
Sehr gute Frage ;-)
Manche bringen es sogar fertig, latin UND utf8 codierte Zeichen nebeneinander in _ein_ Feld zu schreiben. Aber sowas will ich dann doch lieber nicht so genau hinterfragen...
hotti
Wenn du schon genau fragen willst, solltest du nach der Kodierung der Felder und nicht nach der der Datenbank oder der Tabelle fragen.
Wie bekomme ich das heraus? Auf der Home-Seite von meinem phpMyAdmin steht utf8; bei "Operationen" der betroffenen Datenbank steht latin1_german2_ci, aber, wie schon gesagt, beim Feld, worum es geht, steht utf8_unicode_ci.
Hi!
Wenn du schon genau fragen willst, solltest du nach der Kodierung der Felder und nicht nach der der Datenbank oder der Tabelle fragen.
Wie bekomme ich das heraus? Auf der Home-Seite von meinem phpMyAdmin steht utf8; bei "Operationen" der betroffenen Datenbank steht latin1_german2_ci, aber, wie schon gesagt, beim Feld, worum es geht, steht utf8_unicode_ci.
Was auf der Startseite vom PMA steht, hat nichts mit deinen Daten oder der Verbindungen deiner Script zu MySQL zu tun. Für deine Daten ist die Konfiguration der einzelnen Felder maßgebend. Und damit die Daten auch in der konfigurierten Form in den Feldern zu liegen kommen, muss MySQL wissen, in welcher Kodierung sie übertragen werden. Dazu muss man die zu verwendende Kodierung nach jedem Verbindungsaufbau aushandeln oder sich auf den konfigurierten Defaultwert verlassen. Der PMA macht alles richtig. Wenn du ihn zur Datenpflege verwendest, und er auch alles richtig anzeigt, dann kannst du davon ausgehen, dass es deinen Daten gut geht. Jetzt musst du nur noch dafür sorgen, dass MySQL genau weiß, in welcher Kodierung du die Daten senden und empfangen willst.
Lo!
Hi!
Russische, Griechische Zeichen und Umlaute werden als ?????? angezeigt.
Dann sprichst du mit MySQL (oder es mit dir) in einer Kodierung, die diese Zeichen nicht darstellen kann. Der Default-Wert für die auf der Verbindung zu Client zu verwendende Kodierung wird auf Latin1 eingestellt sein. Wenn du nach dem Verbindungsaufbau die zu verwendende Zeichenkodierung explizit angibst, dann bekommst du die Daten in dieser. Und wenn das UTF-8 ist, dann hast du auch keinen Zeichenverlust. Verwende zum Aushandeln das schon oft genannte mysql_set_charset() oder als Ersatz ein SET-NAMES-Statement.
Sowohl im Forum, wie auch im Wiki gibt es ein "<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />", aber daran liegt es nicht - die Fragezeichen kommen schon vom Server so an...
Genau deswegen muss man ja mit dem Server aushandeln, was zu sprechen ist.
Lo!
Wunderbar, es klappt, danke schön!!!