MySQL und UTF-8

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySQL und UTF-8

    Hallöchen.

    Ich arbeite nun schon lange mit MySQL in Verbindung mit PHP, doch eine Sache hat mich immer gewundert - da ich die Sache jetzt wieder vor mir habe, will ich endlich mal Licht in die Sache bringen;

    Wie verwendet man eine MySQL-Datenbank am besten in Verbindung mit PHP im Bezug auf die Umlaute und den Zeichensatz?

    Folgendes Szenario:

    MySQL-Datenbank-Verbindungs-Zeichensatz: utf8_general_ci
    MySQL-Datenbank-Zeichensatz: utf8_general_ci
    MySQL-Tabellen-Zeichensatz: utf8_general_ci
    MySQL-Spalten-Zeichensatz: utf8_general_ci

    PHP-Datei-Zeichensatz: UTF-8, No BOM
    HMTL-Datei-Zeichensatz: UTF-8, No BOM
    HTML-Header-Zeichensatz: UTF-8

    PHPMyAdmin-Header-Zeichensatz: UTF-8

    Ich trage per Hand etwas zum Testen in eine Spalte der Datenbank ein - Die Daten enthalten Umlaute.

    Ergebnis beim Auslesen der Spalte und Anzeigen im HTML: Lustige schwarze Fragezeichen.

    Was zum Teufel geht da schief? Und wieso klappt es, wenn die Daten aus PHP in die Datenbank geschrieben werden? Wie kann ich das beheben?
    This is what happens when an unstoppable force meets an immovable object.

  • #2
    Welchen Zeichensatz hat die Datenbankverbindung von PHP?

    Kommentar


    • #3
      Ich nutze PDO - dort habe ich allerdings keinerlei Einstellungen finden können, welche es mir erlauben, die Verbindung mit einem spezifischen Zeichensatz zu versehen;

      PHP: PDO_MYSQL DSN - Manual
      PHP: MySQL (PDO) - Manual
      PHP: PDO::__construct - Manual
      This is what happens when an unstoppable force meets an immovable object.

      Kommentar


      • #4
        Hallo,

        z. B. so:

        PHP-Code:
        $db = new PDO("mysql:host=" HOSTUSERNAMEPASSWORD);
        $db->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
        $db->exec("set names 'utf8' collate 'utf8_general_ci'"); 
        Gruß,

        Amica
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Über exec()? Ist das nicht ein bisschen... schwer zu beschreiben, das fühlt sich so an als obs nicht so gedacht wäre. Wieso haben die das nicht einfacher eingebaut oO?
          This is what happens when an unstoppable force meets an immovable object.

          Kommentar


          • #6
            In der Programmierung geht es nicht um Gefühle. Es ist richtig so. Einfacher ging es nicht, weil jedes DBMS das anders macht.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Is mir auch klar - Ich meinte damit nur, dass es nicht gerade der Objektorientierung, die mit PDO ja eigentlich gut umgesetzt wurde, entspricht. So eine Anweisung würde doch perfekt in den PDO-MySQL-Treiber passen, dafür gibts ja eigentlich das vierte Attribut von PDO::__construct().

              Aber nunja, dennoch danke für die Mühe.
              This is what happens when an unstoppable force meets an immovable object.

              Kommentar


              • #8
                Zitat von ApoY2k Beitrag anzeigen
                Ich meinte damit nur, dass es nicht gerade der Objektorientierung, die mit PDO ja eigentlich gut umgesetzt wurde, entspricht.
                Warum nicht? Es ist ein SQL-Befehl wie jeder andere, z. B. Insert. Dort schreibst du es ja auch in SQL und nicht objektorientiert, obwohl das sicher auch implementierbar wäre:

                PHP-Code:
                $row $db->myTable->newRow();
                $row->col1 "value1";
                $row->col2 2;
                ...
                $row->insert(); 
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #9
                  dieses db->exec bitte nicht mit dem (DOS) exec vermischen ....

                  ansonsten bliebe noch die Frage, wie du diese Daten "von Hand" eingefügt hast - wenn es via PHP funktioniert ist doch eigentlich alles in Ordnung ...

                  wenn "von Hand" meint, dass du phpmyadmin genommen hast - der hat eigene Zeichensatzeinstellungen, die man konfigurieren kann
                  wenn du es mit dem mysql-Kommandozeilentool gemacht hast - das verwendet möglicherweise den Zeichensatz, der auf dem Webserver "sonst" so läuft - das muss nicht unbedingt UTF 8 sein
                  Zuletzt geändert von eagle275; 29.09.2010, 08:05.
                  [font=Verdana]
                  Wer LESEN kann, ist klar im Vorteil!
                  [/font]

                  Kommentar


                  • #10
                    Nein über PHPMyAdmin - dort hab ich aber auch alles komplett auf UTF-8 gestellt
                    This is what happens when an unstoppable force meets an immovable object.

                    Kommentar

                    Lädt...
                    X