CakePHPとDBの文字コードを別にする方法

cakeはUTF-8のままにしときたいけど、DBはSJISじゃないとダメな場合があったので。


単純に、モデルのbeforeFind、AfterFindなどを使ってエンコードを変換する。
うまくいったように見えるけど、ホントにこれでいいかはわかりません。
MySQLとかなら、DATABASE_CONFIGクラスの設定をするだけでいいかもしれない。

<?php
class AppModel extends Model {

    function beforeFind($queryData) {
        // クエリパラメータの配列を、DB文字コードに変換
        array_walk_recursive($queryData, array($this, 'encodeToDbEncoding'));
        return $queryData;
    }

    function afterFind($results, $primary = false) {
        // 取得結果の配列を、内部文字コードに変換
        array_walk_recursive($results, array($this, 'decodeFromDbEncoding'));
        return $results;
    }

    function beforeSave($options = array()) {
        // saveするデータの配列を、DB文字コードに変換
        array_walk_recursive($this->data, array($this, 'encodeToDbEncoding'));
        return true;
    }

    function query() {
        // Model::queryは可変の引数をとるので同じようオーバーライドにする
        $params = func_get_args();
        array_walk_recursive($params, array($this, 'encodeToDbEncoding'));
        $results = call_user_func_array(array('Model', 'query'), $params);
        if (is_array($results)) {
            $results = $this->afterFind($results);
        }
        return $results;
    }

    function encodeToDbEncoding(&$value, $key) {
        if (is_string($value)) {
            $value = mb_convert_encoding($value, 'SJIS', Configure::read('App.encoding'));
        }
    }

    function decodeFromDbEncoding(&$value, $key) {
        if (is_string($value)) {
            $value = mb_convert_encoding($value, Configure::read('App.encoding'), 'SJIS');
        }
    }

}

※追記
mb_convert_variablesって関数があるので文字コード変換はそれつかったほうがいいです