Zendデータベースクエリ結果は、列の値をnullに変換します
-
22-09-2019 - |
質問
次の手順を使用して、データベースからいくつかのレジスタを取得しています。
必要なモデルを作成します(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 Writersを含む)は、実行されたSQLクエリを表示し、最後の行にはZend_DB_Table_Rowset_Abstractクラスオブジェクトが表示されます。一部のMySQLクライアントでSQLクエリを実行すると、結果は予想通りです。しかし、Zend FireBugのログライターは、ラテン文字(ñ)で列値をnullとして表示します。
言い換えれば、外部SQLクライアントが示していますES_CO |エスパニョール・デ・コロンビア と en_us |アメリカ合衆国の英語 しかし、クエリはZendディスプレイ(および返品)から生じます ES_CO |ヌル と en_us |アメリカ合衆国の英語.
削除しました ñ からのキャラクター エスパニョール・デ・コロンビア また、クエリの結果は、Zend Log FireBug画面と最終的なZendフォーム要素で問題ありません。
MySQLデータベース、テーブル、列は、UTF -8 -UTF8_UNICODE_CI照合にあります。私のZend Frameworkページはすべて、UTF-8チャーセットにあります。 Windows 7 Ultimateで実行されているXAMPP 1.7.1(PHP 5.2.9、Apache、およびMySQL 5.1.33-Community)を使用しています。 Zend Framework 1.10.1。
多くの情報があれば申し訳ありませんが、なぜそれが起こるのか本当にわかりませんので、答えを見つけるためにできる限り多くの関連情報を提供しようとしました。
解決
データベースとの接続をどのように作成し、その接続でcharsetを定義しましたか?それは私が見落としていたものであり、あなたの質問でそれを見つけることができないので、それは問題かもしれませんか?したがって、.iniファイルを使用してデータベースをセットアップして追加します。
resources.db.params.charset = utf8
私のクエリUTF8の問題をすべて解決しました。お役に立てれば。