我正在使用下一个说明从数据库中获取一些寄存器。

创建所需的模型(来自参数模块):

$obj_paramtype_model    = new Params_Model_DbTable_Paramtype();
$obj_param_model        = new Params_Model_DbTable_Param();

从数据库中获取可用的环境

// This returns a Zend_Db_Table_Row_Abstract class object
$obj_paramtype = $obj_paramtype_model->getParamtypeByValue('available_locales');

// This is a query used to add conditions to the next sentence. This is executed from the Params_Model_DbTable_Param instance class, that depends from Params_Model_DbTable_Paramtype class (reference map and dependentTables arrays are fine in both classes)
$obj_select = $this->select()->where('deleted_at IS NULL')->order('name');

// Execute the next query, applying the select restrictions. This returns a Zend_Db_Table_Rowset_Abstract class object. This means "Find Params by Paramtype"
$obj_params_rowset = $obj_paramtype->findDependentRowset('Params_Model_DbTable_Param', 'Paramtype', $obj_paramtype);

// Here the firebug log displays the queries....
Zend_Registry::get('log')->debug($obj_params_rowset);

我有一个来自Zend的DB执行的剖面。此时,日志和profiler对象(包括Firebug作家)显示执行的SQL查询,最后一行显示结果Zend_db_table_rowset_abstract_abstract class Object。如果我在某些MySQL客户端中执行SQL查询,则结果如预期。但是Zend Firebug日志作者以拉丁字符(ñ)为单位的列值。

换句话说,外部SQL客户端显示es_co | Españolde哥伦比亚en_us |美国英语 但是查询来自Zend显示(和返回) es_co |无效的en_us |美国英语.

我已经删除了 ñ 角色来自 Españolde哥伦比亚 查询结果在我的Zend Log Firebug屏幕和最终的Zend Form Element中都很好。

MySQL数据库,表和列位于UTF -8 -UTF8_UNICODE_CI COLTRATION中。我所有的Zend框架页面都在UTF-8 Charset中。我正在使用Windows 7 Ultimate上运行的XAMPP 1.7.1(php 5.2.9,Apache,在端口90和MySQL 5.1.33-Community); Zend Framework 1.10.1。

很抱歉,如果有太多信息,但是我真的不知道为什么会发生这种情况,因此我尝试提供尽可能多的相关信息来帮助找到答案。

有帮助吗?

解决方案

您如何与数据库建立连接,并在该连接中定义了Charset?那是我忽略的东西,因为我在您的问题中找不到问题,这可能是问题吗?因此,当我使用.ini文件来设置数据库时,添加

resources.db.params.charset = utf8

解决了我所有查询的UTF8问题。希望这可以帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top