Problem mit UTF-8 in CakePHP mit MySQL

CakePHP kann zwar mit UTF-8 umgehen, allerdings werden die Daten nicht als UTF-8 in der MySQL-Datenbank gespeichert. Datensätze sehen dann beispielsweise so aus: „Bündnis 90 Die Grünen“.

Im Konstruktor des AppModel („/app/app_model.php“) kann man dieses Problem aber beheben, indem man „SET NAMES ‚UTF8′“ ausführen lässt, bevor andere Abfragen an die Datenbank gestellt werden.

class AppModel extends Model
{
    function __construct($id=false, $table=null, $ds=null)
    {
        parent::__construct($id, $table, $ds);
        if(!defined('SET_NAMES_UTF8'))
        {
            $this->query("SET NAMES 'UTF8'");
            define('SET_NAMES_UTF8', true);
        }
    }
}

6 Gedanken zu „Problem mit UTF-8 in CakePHP mit MySQL“

  1. Hallo,
    hatte gerade das gleiche Problem und herausgefunden, dass es eine undokumentierte Option gibt, mit der man CakePHP das Charset der Datenbankverbindung mitteilen kann. das geht so:

    var $default = array(
    		'driver' => 'mysql',
    		'persistent' => false,
    		'host' => 'localhost',
    		'login' => 'root',
    		'password' => 'xxxx',
    		'database' => 'yyyy',
            'encoding' => 'utf8',
    	);
    

    Das hat den gleichen Effekt wie dein SQL-Befehl.

    Viele grüße
    Sebastian

  2. @ilexius: Die Option ist nicht komplett undokumentiert, sie steht im Kommentar darüber.

    Ich habe jetzt mal angeregt, dass utf8 mehr oder weniger als Standard in diese Konfig kommt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.