终于成功在项目中安装 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' ) ) ) ) );
问题解决