簡體   English   中英

為Zend_Db設置字符集的最佳方法(或至少比我目前正在做的更好)

[英]Best way to set charset for Zend_Db (or at least better than what I'm currently doing)

我正在使用Zend_DB並嘗試將charset更改為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'");
   }
}

我認為在配置中添加charset就足夠了,但是只有在我直接使用以下設置時才應用它:

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

我的問題:有沒有更好的方法來設置charset,也許配置明智?

首先,我將數據庫設置分解為它自己的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配置文件中包含以下內容,我們就可以在上面的Bootstrap中尋址資源'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數據庫,但MySQL看起來很相似,但是使用pdo_mysql並且dbname不是文件路徑而是字符串。

有關資源的更多文檔可在此處找到:

http://framework.zend.com/manual/en/zend.application.available-resources.html

現在使用資源配置部分agin我們可以添加以下行來設置數據庫字符集,如下所示:

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

如果你仍然有問題,請看一下關於akrabat dot com的Rob Allen的zend框架教程博客文章以及關於ZF資源的UTF8和mysql設置的第45號以后的評論。

取自我們的application.ini:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM