MySQL で文字化けを防ぐためには
SET NAMES utf8
のように SET NAMES を実行するのが有効なのですが、これを app/config/database.php で設定する方法です。

'encoding'=>'文字コード'
をデータベースの設定項目に追加してやるだけです。

具体的には app/config/database.php が下記のようになります。

var $default = array(
    'driver' => 'mysql',
    'connect' => 'mysql_connect',
    'host' => 'localhost',
    'login' => 'user',
    'password' => 'password',
    'database' => 'dbname',
    'prefix' => '',
    'encoding' => 'utf8'
);


cake/libs/model/dbo/dbo_mysql.php
で下記のように実行されています。

function connect() {
    (略)
    if (isset($config['encoding']) && !empty($config['encoding'])) {
        $this->setEncoding($config['encoding']);
    }

    return $this->connected;
}
function setEncoding($enc) {
    return $this->_execute('SET NAMES ' . $enc) != false;
}

関連する投稿