php - 为 Zend_Db 设置字符集的最佳方式(或至少比我目前正在做的更好)

标签 php mysql zend-framework character-encoding 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'");

我的问题:有没有更好的方法来设置字符集,也许配置明智?

最佳答案

首先,我会将您的数据库设置分解为它自己的初始化函数,如下所示:

/**
 * 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 在 akrabat dot com 上的 zend 框架教程博客文章,以及关于 ZF 资源的 UTF8 和 mysql 设置的评论从第 45 条开始。

关于php - 为 Zend_Db 设置字符集的最佳方式(或至少比我目前正在做的更好),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4192698/

相关文章:

php - Apache 本地主机的默认文件

未找到 PHP 扩展

php - MySQL关闭计时

Java MySql PoolableConnectionFactory &

php - 如何从 zendframework 2.0 数据库中检索特定值

php - 在 PHP MySQL 中更新记录的最安全方法

php - 使用距离连接两个表的结果

mysql - SQL如何执行limit和offset?

php - 使用未定义常量 - 假定为 ' ' - 空白常量?

php - 弃用:在功能系统中检索服务定位器 - ZF2