Timur: MySQL Datenbank Version: MySQL4.0

Hallo,

ich habe ein Problem. Undzwar werden in meiner MySQL Datenbanken Sonderzeichen in den Feldern nicht angezeigt, sondern immer so &#....; angezeigt. Eigentlich hat ja sowas in einer MySQL Datenbank nichts zu suchen, oder?

Irgendwie scheint es so, als ob ich nur die Sprache der Benutzeroberfläche ändern kann. Aber nicht das CHARSET.

Ich bin mir sicher, dass ich schon MySQL Datenbanken gesehen habe, wo die Sonderzeichen auch richtig in den Felden angezeigt wurden.

Hängt das irgendwie mit der Version zusammen? Gibt es irgendwo eine Einstellung, womit dieses Problem Dauerhaft behoben ist?

Bei den Sonderzeichen handelt es sich um türkische Sonderzeichen.

Viele Grüße
Timur

  1. wenn du phpmyadmin öffnest dann dann ist der 6 punkt: Zeichensatz hier ist eine auswahlliste hier kannst du türkisch aussuchen: utf8_türkisch_ci
    probiere es mal damit dann kannst du vieleicht die türkischen sonderzeichen benutzen.
    gruß juergen

    1. Hallo Jürgern,

      habe ich auch probiert. Und es wurde auch angezeigt. Aber das Problem ist, wenn ich das auf türkisch ändere, ist das ganze Menü auch auf türkisch. Was ich aber nicht haben will.

      Gibt es da keine andere Lösung?

      Gruß
      Timur

    2. echo $begrüßung;

      wenn du phpmyadmin öffnest dann dann ist der 6 punkt: Zeichensatz hier ist eine auswahlliste hier kannst du türkisch aussuchen: utf8_türkisch_ci

      Zum einen hat Version 4.0 kein UTF-8 im Angebot. Zum anderen hat die Kollation nichts mit dem Zeichenvorrat zu tun, nur mit der Art, wie verglichen und sortiert wird.

      Die von dir erwähnte Angabe folgt dem Muster kodierung_kollation_casesensitivity. Der Teil Kodierung legt dabei fest, welcher Zeichenvorrat in welcher Kodierung verwendet wird.

      Und dann kommt noch hinzu, dass du im phpMyAdmin vermutlich die Startseite meinst. Die Angabe dort ist nur für den phpMyAdmin von Belang und auch nur für die Richtung zum MySQL-Server. Beim Lesen verwendet der PMA immer UTF-8.

      echo "$verabschiedung $name";

  2. echo $begrüßung;

    Und zwar werden in meiner MySQL Datenbanken Sonderzeichen in den Feldern nicht angezeigt, sondern immer so &#....; angezeigt. Eigentlich hat ja sowas in einer MySQL Datenbank nichts zu suchen, oder?

    Sie haben da nichts zu suchen, weil sie die weitere Stringverarbeitung (Sortieren, Vergleichen, Länge ermitteln, ...) wirksam behindern. Außerdem belegen sie nur unnötig Speicherplatz.

    Irgendwie scheint es so, als ob ich nur die Sprache der Benutzeroberfläche ändern kann. Aber nicht das CHARSET.

    Das Problem hat mit der Kodierung im Bereich Datenbank erst einmal nichts zu tun.

    Ich bin mir sicher, dass ich schon MySQL Datenbanken gesehen habe, wo die Sonderzeichen auch richtig in den Felden angezeigt wurden. Hängt das irgendwie mit der Version zusammen?

    MySQL hat ab Version 4.1 beim Thema Zeichen und Kodierung einen gewaltigen Schritt nach vorn getan.

    Gibt es irgendwo eine Einstellung, womit dieses Problem Dauerhaft behoben ist?

    Es gibt keinen Do-what-I-mean-Button. Du musst dich schon mit dem Thema auseinandersetzen und es verstehen, um die Fehler zu vermeiden.

    Bei den Sonderzeichen handelt es sich um türkische Sonderzeichen.

    Um mal konkret zu werden: Die kommen ja nicht aus heiterem Himmel sondern werden vermutlich in ein HTML-Formular eingegeben. Welche Kodierung verwendet die das Formular enthaltende Seite? Ich vermute mal, sie ist ISO-8859-1 oder Windows-1252 oder irgendeine andere Kodierung, die die türkischen Zeichen nicht enthält. Die Browser können nun die eingegebenen türkischen Zeichen nicht in diese Kodierung bringen und machen irgendwas anderes, weil für den Fall kein konkretes Verhalten standardisiert ist. Du hast einen Browser erwischt, der die Zeichen als Nummerische Zeichenreferenz (NCR) sendet. Du kannst das Problem nur beseitigen, indem du eine Kodierung verwendest, die für türkisch besser geeignet ist. Mit ISO-8859-9 hast du zwar bessere Karten und auch die deutschen Umlaute sind enthalten, aber irgendwann kommt wieder ein Anwender auf die Idee, ein nicht mit dieser Kodierung darstellbares Zeichen einzugeben. Stell lieber gleich auf UTF-8 um, dann bist du diese Sorgen los. Das nächste Problem ist aber, dass dann deine gesamte Verarbeitungskette auf UTF-8 umgestellt werden muss. Dabei musst du penibel zwei Dinge beachten: a) Ein System muss mit UTF-8 umgegehen können (z.B. darauf konfiguriert sein). b) Ein System muss dem nachfolgenden System mitteilen, dass die übergebenen Daten UTF-8-kodiert sind.

    MySQL in Version 4.0 ist nicht UTF-8-fähig. Wenn man es aber als reinen Datenspeicher verwendet und keinerlei Stringverarbeitung (nichtmal Sortieren oder Vergleichen) benötigt, kann man damit arbeiten. Sinnvoller ist es, eine aktuelle Version zu verwenden. Jeder ernstzunehmende Provider hat auch Version 5.0 im Angebot. Wiederum sind zwei Dinge zu beachten: die Kodierung der einzelnen Felder(!) und die Kodierung der Verbindung. Letztere sollte nach jedem Connect explizit ausgehandelt werden (mysql_set_charset() oder zur Not mit SET NAMES).

    PHP ist derzeit nicht UTF-8-fähig (Versionen kleiner 6). Solange nur Daten durchgereicht werden, ist das kein Problem. Benötigt man Stringverarbeitung gibt es als Workaround die Multibyte-String-Extension mit eingeschränktem Funktionsumfang (und langsamerer Verarbeitungsgeschwindigkeit) gegenüber den üblichen String-Funktionen.

    Browser können mit UTF-8 umgehen. Man muss es nur richtig deklarieren und die deklarierte Kodierung auch verwenden. Dazu gibt es den charset-Zusatz im HTTP-Header Content-Type oder als Ersatz das gleichbenannte Meta-Element.

    echo "$verabschiedung $name";