• ZF1.8 DB字符集设定

    Posted on 八月 11th, 2009 inetdemon 2 comments

    Zend Framework的db 字符集设置,由于ZF的一个bug,以前在设置db的字符集为utf-8时,通常是在bootstrap中设定

     $db = Zend_Db::factory($this->_config->db);
     $db->query("SET NAMES utf8");  //setup encoding

    这种做法的一个缺点就是DB的lazy loading机制变得无效,所有不调用数据库的页面也需要去打开一个数据库链接。困难之处在于每种数据库的charset名称并不相同,之前一直有一个提议,将charset做一个db的option来设置,ZF1.7开始将这个建议实施,现在我们可以用如下方法,设置db的option

     <?php
    $db = new Zend_Db_Adapter_Pdo_Mysql(array(
    'host'     => 'your_host_or_ip',
    'username' => 'your_myslq_username0,
    'password' => 'mysql_pass',
    'dbname'   => 'your_db_name',
    'driver_options'  => array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'utf8\'')
    ));?>

    除此之外,还可以在config中设置,不过由于config文件并不认得常量,因此只能用以下方式来设置:
    db.params.driver_options.1002 = “SET NAMES utf8″
    其中1002即PDO::MYSQL_ATTR_INIT_COMMAND这个常量的值。

    如果想直接修改DB的charset collocation可以参考mysql的charset转化指南

    感谢 julian的提醒,自从ZF1.8开始已经可以使用db.param.charset=”UTF-8″来设定; 如果使用的是Zend_Application,可以设定resource.db.params.charset=”UTF-8″.

     

    2 responses to “ZF1.8 DB字符集设定”

    1. 可以这样撒
      application.ini
      resources.db.adapter = PDO_MYSQL
      resources.db.params.host = localhost
      resources.db.params.username = root
      resources.db.params.password =
      resources.db.params.dbname =
      resources.db.params.charset = utf8
      resources.db.params.profiler = true
      function _initDb(){
      $resources = $this->getPluginResource(‘db’);
      $db = $resources->getDbAdapter();
      Zend_Db_Table::setDefaultAdapter($db);
      Zend_Registry::set(‘db’,$db);
      }

    2. 汤博客杂志站

      博客文章不错,读了。。今天下午到访。望回访。

    Leave a reply