utf8mb4 - ich werde irre ^^

  • Hallo miteinander ...

    Habe versucht meine Datenbank vom alten Provider auf NetCup zu portieren.

    Das gute alt utf8_general_ci gibt es auf den neuen Server nicht, also utf8mb4_unicode_ci, auf Nummer sicher gehen.

    Leider werden jetzt alle Umlaute falsch dargestellt. Habe einiges probiert:

    * Documentformat UTF-8, UTf-8 BOM

    * meta charset: utf-8, mb4 ...

    * PHP-Versionen: 8.2 - 7.6

    * verschieden Formate in der MySQL-DB

    Keine Verbesserung :cursing:

    Ich bin doch nicht der einzige, der das Problem hat ?

    Ich könnte zwar Ä in Ä umschreiben, ist bei einem größeren Projekt auch to much ...

    Wahrscheinlich gibt es eine Lösung, habe mich aber beim Googlen noch mehr verwirrt.

    Bin für jeden Tip dankbar - Gruß GogoM

  • Ist die Kodierung im SQL-Dump überhaupt korrekt bzw. intakt?


    Womit importierst Du es? Eventuell einmal direkt über SSH mit dem mysql Befehl versuchen.

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Falsches Charset in der Datenbank, falsches Charset in der Datenbank-Verbindung, irgendwo ein veraltetes mysqldump im Einsatz, ... es gibt viele Möglichkeiten. Hast du denn mal selber in den Dump geschaut ob die Umlaute dort überhaupt richtig stehen? Dann sollte sich das auch importieren lassen... lustig wirds wenn UTF-8 als Latin1 gespeichert wurde. Eine PHP-Anwendung kann auch nochmal ein eigenes Charset-Setting haben, falls das neu installiert und nicht übernommen wurde. Das muss dann auch wieder stimmen.


    Musst also letztlich schauen, wie stehts in der alten Datenbank, wie stehts im Export, in der neuen Datenbank nach dem Import, ... also herausfinden an welchem Punkt der Umlaut flöten geht.

  • Wenn es nur beim Auslesen mit PHP nicht stimmt, aber in der DB nachweislich korrekt drinnen steht (also mit phpMyAdmin stimmt), kann es neben dem Charset der MySQL-Verbindung (siehe Beitrag von frostschutz) auch am Charset der Ausgabe liegen: Bei HTML z.B. mit einem Meta-Tag definiert oder generell durch den HTTP-Header Content-Type. In diesem Fall helfen die Entwicklertools des Browsers weiter, um es weiter einzugrenzen.

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

    2 Mal editiert, zuletzt von KB19 ()

    Gefällt mir 1
  • Gelöst :S:S:S

    Dank eurer Tipps bin ich die Sache nochmal durchgegangen.

    mysqli_query($db, "set names utf8mb4"); nach dem Laden der DB und

    <meta charset=\"LATIN1\"> im Header und alles wird korrekt angezeigt.

    Dank an euch <3

  • Leider zu spät gesehen, ja das ist ein Asbach uraltes Problem, hatten wir damals schon von latin1 auf utf8.

    Schleppen noch einige alte Kundenprojekte aus der Steinzeit so durch, die ihre Tools einfach nicht neu erstellen wollen/können, aber das Backend (Datenbank, etc.) wird halt immer wieder aktualisiert. Wir "fummeln" dann auch solche Notlösungen rein, Hauptsache es läuft.

  • Gelöst :S:S:S

    Dank eurer Tipps bin ich die Sache nochmal durchgegangen.

    mysqli_query($db, "set names utf8mb4"); nach dem Laden der DB und

    <meta charset=\"LATIN1\"> im Header und alles wird korrekt angezeigt.

    Dank an euch <3

    Das war für mich nach langem verzweifeltem Suchen nach der Ursache nun endlich der Brustlöser. Danke!
    Ich habe eine PDO-Abfrage und da sieht meine Lösung jetzt so aus:

        $pdo = new PDO($db_host, $db_user, $db_pass, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
        $pdo->exec("SET NAMES utf8mb4");