Ein Weblog über Technik

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);
        }
    }
}
März 1, 2010
ad

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

November 15, 2010
ad

@Ilexius sehr nützlich!

Juli 13, 2011
ad

llexius, sehr sehr sehr nützlich. vielen vielen dank :)

Martin
August 13, 2011
ad

@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.

d
August 23, 2011
ad

vielen dank für diesen hilfreichen post :)

Einen Kommentar schreiben