Zend数据库查询结果将列值转换为null

时间:2010-02-22 17:56:08

标签: zend-framework null zend-db-table rowset latin

我正在使用下一条指令从我的数据库中获取一些寄存器。

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

$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所有数据库执行的分析器。此时,日志和探查器对象(包括Firebug编写器)显示执行的SQL查询,最后一行显示生成的Zend_Db_Table_Rowset_Abstract类对象。如果我在某些MySQL客户端中执行SQL查询,结果就像预期的那样。但Zend Firebug日志编写器将列值显示为NULL,并带有拉丁字符(ñ)。

换句话说,外部SQL客户端显示 es_CO | EspañoldeColombia en_US |美国英语,但Zend的查询结果显示(并返回) es_CO | null en_US |美国英语

我已经从EspañoldeColombia 中删除了ñ字符,查询结果在我的Zend Log Firebug屏幕和最终的Zend Form元素中都很好。

MySQL数据库,表和列采用UTF-8 - utf8_unicode_ci排序规则。我所有的zend框架页面都是UTF-8字符集。我在Windows 7旗舰版上运行XAMPP 1.7.1(PHP 5.2.9,Apache端口90和MySQL 5.1.33社区); Zend Framework 1.10.1。

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

1 个答案:

答案 0 :(得分:0)

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

resources.db.params.charset = utf8

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