2010-07-09 83 views
4

我刚刚遇到一些相当奇怪的事情,我使用Zend Framework 1.10和Zend_Db_Table模块从数据库中读取一些数据。数据库本身,表格和有问题的字段都将它们的排序规则设置为“utf8_general_ci”,并且在使用phpMyAdmin进行检查时,所有特殊字符在DB中都显示为格式正确。另外,使用Zend_Db_Table进行保存也可以,但是当我读取数据并将其回送到浏览器时,它将作为ISO-8859-1返回,而不是UTF8。当我试图在从数据库返回的值上使用json_encode(它仅适用于UTF8字符串作为输入)时,我注意到了同样的事情。Zend DB和编码

如何设置Zend_Db_Table/Zend_Db_Row应该始终与UTF8一起使用并返回一个UTF8值?我还没有在我的应用程序中设置任何关于编码的内容。

非常感谢您的帮助!

回答

12

请注意。在我的情况下,这个人帮助:

$this->db = new Zend_Db_Adapter_Pdo_Mysql(array(
     'host'  => $config['db_hostname'], 
     'username' => $config['db_username'], 
     'password' => $config['db_password'], 
     'dbname' => $config['db_database'], 
     'charset' => 'utf8' 
    )); 
+0

这并没有为我,但是如下@robertbasic评论“resources.db.params.charset = utf8”在应用程序ini中解决了这个问题。 – ktamlyn 2014-02-21 19:11:56

+0

使这个接受的答案,因为upvotes明显支持这种解决方案(连同@ robertbasic的评论) – Robin 2014-05-07 08:53:22

1

好吧只是找到了解决办法,尝试这样做:

$db = Zend_Db::factory($config->database); // Setting up the DB 
$db->query("SET NAMES 'utf8';");   // That's the magic line I was missing 

希望这有助于别人在某个时候:)

+9

它更容易只是补充:'resources.db.params.charset = utf8'您app.ini – robertbasic 2010-07-10 06:38:44

0

而且你可以把“字符集”键与所需的值到配置并且DB驱动程序将执行适当的查询(取决于所使用的DBMS)。似乎目前(版本1.10.5)几乎所有的驱动程序都支持这一点。

4
resources.db.params.charset = utf8 

像robertbasic说的。