我使用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'");
我的问题:是否有更好的方式设置字符集,也许配置明智?
首先,我会将数据库设置分解成它自己的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;"
如果还有问题,请查看Rob Allen的zend框架教程博客文章,在akrabat dot com上以及关于ZF资源的UTF8和MysqL设置的第45号左右的注释.