次の手順を使用して、データベースからいくつかのレジスタを取得しています。
必要なモデルを(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からのすべてのDB実行用のプロファイラーがあります。この時点で、ログオブジェクトとプロファイラーオブジェクト(Firebugライターを含む)に実行されたSQLクエリが表示され、最後の行に結果のZend_Db_Table_Rowset_Abstractクラスオブジェクトが表示されます。一部のMySQLクライアントでSQLクエリを実行すると、期待どおりの結果が得られます。ただし、Zend Firebugログライターは、ラテン文字(ñ)を含む列値をNULLとして表示します。
つまり、外部SQLクライアントは es_CO|を表示します。エスパニョールデコロンビアとen_US| 米国の英語ですが、Zendからのクエリ結果は es_CO |を表示(および返します)します。null およびen_US| アメリカ合衆国の英語。
EspañoldeColombiaからñ文字を削除しました。クエリ結果は、ZendLogFirebug画面と最後のZendForm要素で問題ありません。
MySQLデータベース、テーブル、および列はUTF-8-utf8_unicode_ci照合にあります。私のzendフレームワークページはすべてUTF-8文字セットです。Windows 7Ultimateで実行されているXAMPP1.7.1(PHP 5.2.9、ポート90のApacheおよびMySQL 5.1.33-コミュニティ)を使用しています。ZendFramework1.10.1。
情報が多すぎて申し訳ありませんが、なぜそうなるのかよくわからないので、できるだけ多くの情報を提供して答えを見つけようと思いました。