2010-11-16 23 views
10

我使用Zend_Db的,並試圖改變字符集爲utf8,這裏是代碼:最好的方式來設置字符集爲Zend_Db的(或者好至少比我目前做的)

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'"); 
    } 
} 

我認爲這將是足夠的添加字符集的配置,但他只applys它,如果我把它直接使用:

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

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

回答

17

首先我打破了你的數據庫安裝到它自己的初始化函數,像這樣:

/** 
* 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數據庫MySQL的,但看起來相似,但與PDO_MYSQL和dbname不會是文件路徑,而是一個字符串。

上的資源更多的文檔可以在這裏找到:

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

現在使用的資源配置部分阿恩,我們可以給它添加以下行來設置數據庫字符集,像這樣:

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

如果仍然存在問題,請查看Rob Allen的zek框架教程博客帖子,關於utf8和mysql設置ZF資源的akrabat dot com和45開始的評論秒。

+0

多數民衆贊成我稱之爲徹底:D工程就像一個魅力,謝謝你! – Hannes 2010-11-16 10:14:26

1

從我們的application.ini摘自:

db.params.driver_options.3 = "SET NAMES 'utf8'" 
相關問題