zend framework2 + Doctrine 中文乱码问题

终于成功在项目中安装 Doctrine 了,不过,却发现用 Doctrine 入库的中文都是乱码,虽然用 Doctrine 再次取出恢复正常,但是中感觉缺点什么。
检查数据表、文件都已经是 UTF8了,唯一可能出现问题的就是 Doctrine 连接的问题,找到 DoctrineDBALDriverPDOMySqlDriver 源代码(这是类路径,要搜索一下),发现:

    /**
     * Constructs the MySql PDO DSN.
     *
     * @param array $params
     *
     * @return string The DSN.
     */
    protected function constructPdoDsn(array $params)
    {
        $dsn = 'mysql:';
        if (isset($params['host']) && $params['host'] != '') {
            $dsn .= 'host=' . $params['host'] . ';';
        }
        if (isset($params['port'])) {
            $dsn .= 'port=' . $params['port'] . ';';
        }
        if (isset($params['dbname'])) {
            $dsn .= 'dbname=' . $params['dbname'] . ';';
        }
        if (isset($params['unix_socket'])) {
            $dsn .= 'unix_socket=' . $params['unix_socket'] . ';';
        }
        if (isset($params['charset'])) {
            $dsn .= 'charset=' . $params['charset'] . ';';
        }

        return $dsn;
    }

关键是:

$dsn .= 'charset=' . $params['charset'] . ';';

于是,到文件 doctrine.local.php 添加内容为:

<?php
return array(
    'doctrine' => array(
        'connection' => array(
            'orm_default' => array(
                'driverClass' => 'DoctrineDBALDriverPDOMySqlDriver',
                'params' => array(
                    'host' => 'localhost',
                    'port' => '',
                    'user' => 'yourusername',
                    'password' => 'yourpassword',
                    'dbname' => 'yourdbname',
                    'charset' => 'UTF8'
                )
            )
        )
    )
);

问题解决

发表评论

电子邮件地址不会被公开。 必填项已用*标注