mysqli und utf8 funktioniert nicht

  • jenshh jenshh
    Padawan
    0 x
    37 Beiträge
    0 Hilfreiche Beiträge
    20. 01. 2013, 12:48

    Ich versuche gerade mehrere Installationen auf utf8 umzustellen. Das funktioniert auch im Prinzip. Nur sämtliche Extensions haben ein Problem. Ich nutze mysqli und baue dazu eine neue Verbindung in der Form

    $mysqli = new mysqli('', TYPO3_db_username, TYPO3_db_password, TYPO3_db);

    in jeder Extension auf. Das führt jetzt dazu, dass ein Aufruf von

    $row = $result->fetch_assoc()

    die Daten in Latin1 zurück liefert. Das ist so, weil bei 1&1 das in der my.cnf eingetragen ist. Ich vermute das ist bei vielen anderen Providern auch so. Die Einstellung 'SET NAMES utf8' in der localconf greift hier nicht, weil ich ich ja mysqli nutze und eine neue Verbindung aufbaue.

    Die Datei /etc/my.cnf kann ich leider nicht ändern. Daher fällt mir hier nämlich nur eine Lösung ein: in allen Extensions den Befehl

    $mysqli->set_charset("utf8" )

    einzufügen. Allerdings habe ich mehr als 30 Extensions die ich anpassen müsste, was jetz echt lästig wäre. Wenn ich das schon machen muss, ist für mich die Frage, ob es nicht eine bessere oder richtigere Lösung gibt.

    Mit $GLOBALS['TYPO3_DB']->exec_SELECTquery zu arbeiten geht nicht, weil ich recht komplexe Statements (Union, left outer join) habe, die ich damit nicht absetzen kann. Dass mir Typo3 das mysqli Objekt zur Verfügung stellt, wäre nett, geht aber wohl auch nicht.

    Ich nutze Typo3 4.5 und 4.7

    Beste Grüße
    Jens


  • 1
  • aemka aemka
    Jedi-Ratsmitglied
    0 x
    562 Beiträge
    9 Hilfreiche Beiträge
    20. 01. 2013, 16:29

    Du kannst auch mit $GLOBALS['TYPO3_DB'] freie Queries absetzen, siehe Doku. Damit wäre denke ich dein Problem schon gelöst. Am system vorbei zu arbeiten ist generell keine gute idee.

    http://www.aemka.de/

  • jenshh jenshh
    Padawan
    0 x
    37 Beiträge
    0 Hilfreiche Beiträge
    20. 01. 2013, 17:05

    Naja, mysqli war bislang die empfohlene Variante, jedenfalls vor T3 4.5. Und PHP sagt dazu:
    New users are advised to use MySQL Improved mysqli_ functions rather than the older [replaced]mysql_ functions.

    Wann nutzt denn TYPO3 mysqli?

  • MajPay MajPay
    Jedi-Meister
    0 x
    345 Beiträge
    2 Hilfreiche Beiträge
    21. 01. 2013, 08:18

    Sertze als erstes query nach der Verbindung "SET NAMES utf8";

    Damit erzwingst du utf-8 als Zeichensatz.

  • aemka aemka
    Jedi-Ratsmitglied
    0 x
    562 Beiträge
    9 Hilfreiche Beiträge
    22. 01. 2013, 11:49

    Es war noch nie eine empfohlene Variante für TYPO3-Entwicklungen mit Zugriffen auf die TYPO3-Datenbank die TYPO3_DB API komplett zu umgehen. Du siehst ja wozu das führen kann.

    http://www.aemka.de/

  • 1