11


2

Zend_Dbの文字セットを設定する最良の方法(または、少なくとも現在実行している方法よりも良い方法)

私はZend_DBを使用して、文字セットをutf8に変更しようとしています。コードは次のとおりです。

config.ini:

[development]
db.host = "localhost"
db.username = "root"
db.password = "toor"
db.dbname = "db_whoopdiedo"
db.charset = "utf8"

bootstrap.php:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

    public function _initAutoload()
    {
        Zend_Registry::set(
            'config',
            new Zend_Config_Ini(APPLICATION_PATH.'/configs/config.ini', 'development')
        );

        Zend_Registry::set(
            'db',
            Zend_Db::factory('Pdo_Mysql', Zend_Registry::get('config')->db)
        );

        Zend_Registry::get('db')->setFetchMode(Zend_Db::FETCH_OBJ);
        Zend_Registry::get('db')->query("SET NAMES 'utf8'");
        Zend_Registry::get('db')->query("SET CHARACTER SET 'utf8'");
   }
}

構成に文字セットを追加するだけで十分だと思いましたが、私はそれを使用して直接設定した場合にのみそれを適用します:

Zend_Registry::get('db')->query("SET NAMES 'utf8'");
Zend_Registry::get('db')->query("SET CHARACTER SET 'utf8'");

私の質問:文字セットを設定するより良い方法はありますか?

2 Answer


17


まず、データベースのセットアップを次のような独自のinit関数に分割します。

/**
 * Initiate Zend Autoloader
 * @return Zend_Db_Adapter
 */
protected function _initDatabase()
{
    $resource = $this->getPluginResource('db');
    $db = $resource->getDbAdapter();
    Zend_Registry::set("db", $db);
    return $db;
}

上記の例では、Zend Frameworkの特定の一般的なタスクの定義済みの構成構造であるリソースを使用しています。 application.ini構成ファイルに以下を含めるだけで、上記のブートストラップでリソース「db」に対処できます。

resources.db.adapter = "pdo_sqlite"
resources.db.params.host = "localhost"
resources.db.params.username = "databaseuser"
resources.db.params.password = "mysecretpassword"
resources.db.params.dbname = APPLICATION_PATH "/data/db/ccymod.db"
resources.db.isDefaultTableAdapter = true

この例はsqlite db向けですが、MySQLは同様に見えますが、pdo_mysqlとdbnameはファイルパスではなく文字列になります。

リソースに関するその他のドキュメントは、次の場所にあります。

リソース設定セクションを使用して、次の行を追加して、データベースの文字セットを次のように設定できます。

resources.db.params.charset = "utf8"
resources.db.params.driver_options.1002 = "SET NAMES utf8;"

それでも問題が解決しない場合は、Rob Allenのakrabat dot comに関するzend frameworkチュートリアルのブログ投稿と、ZFリソースのUTF8とmysqlのセットアップに関するコメントが45番前後に続くことをご覧ください。


1


application.iniから取得:

db.params.driver_options.3 = "SET NAMES 'utf8'"