Php zenddb与编码
我刚刚遇到了一些非常奇怪的事情,我使用Zend Framework 1.10和Zend_Db_Table模块从数据库中读取一些数据。数据库本身、表和相关字段的排序规则都设置为“utf8\u general\u ci”,使用phpMyAdmin检查时,所有特殊字符在数据库中的格式都正确。另外,使用Zend_Db_表保存也很好,但是当我读取数据并将其回显到浏览器时,返回的是ISO-8859-1,而不是UTF8。我在尝试对从DB返回的值使用json_encode(仅适用于UTF8字符串作为输入)时注意到了同样的情况 如何设置Zend_Db_Table/Zend_Db_行始终与UTF8一起工作并返回UTF8值?我还没有在我的应用程序中设置任何有关编码的内容Php zenddb与编码,php,zend-framework,encoding,utf-8,zend-db,Php,Zend Framework,Encoding,Utf 8,Zend Db,我刚刚遇到了一些非常奇怪的事情,我使用Zend Framework 1.10和Zend_Db_Table模块从数据库中读取一些数据。数据库本身、表和相关字段的排序规则都设置为“utf8\u general\u ci”,使用phpMyAdmin检查时,所有特殊字符在数据库中的格式都正确。另外,使用Zend_Db_表保存也很好,但是当我读取数据并将其回显到浏览器时,返回的是ISO-8859-1,而不是UTF8。我在尝试对从DB返回的值使用json_encode(仅适用于UTF8字符串作为输入)时注意
非常感谢你的帮助 好的,刚刚找到解决方案,请尝试执行以下操作:
$db = Zend_Db::factory($config->database); // Setting up the DB
$db->query("SET NAMES 'utf8';"); // That's the magic line I was missing
希望这对其他人有所帮助:)此外,您可以将具有所需值的“charset”键放入config,DB driver将执行适当的查询(取决于所使用的DBMS)。似乎目前(版本1.10.5)几乎所有的驱动程序都支持这一点
resources.db.params.charset = utf8
就像robertbasic所说的。请注意。就我而言,这一点有助于:
$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'
));
只需将:
resources.db.params.charset=utf8
添加到你的app.init对我来说并不合适,但正如@robertbasic在app ini中下面评论的“resources.db.params.charset=utf8”修复了这个问题。这是一个公认的答案,因为投票人显然支持这个解决方案(以及@robertbasic的评论)