首页 > 程序开发 > ZF1.8 DB字符集设定

ZF1.8 DB字符集设定

2009年8月11日

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″.

VN:F [1.9.22_1171]
Rating: 10.0/10 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)
ZF1.8 DB字符集设定, 10.0 out of 10 based on 1 rating

程序开发

  1. julian
    | #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);
    }

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  2. 汤博客杂志站
    | #2

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

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  1. 本文目前尚无任何 trackbacks 和 pingbacks.

This blog is kept spam free by WP-SpamFree.