1

データベース モデルの管理に使用PHPActiveRecordしていますが、エンコードの問題が発生しています。

PHPMyAdmin v3.3.10.4MySQL client v5.0.51aおよびを使用してPHPActiveRecord v1.0います。私の接続照合とすべてのテーブルは、utf8_general_ci照合で定義されています。

私のPHPActiveRecord接続は次のように作成されます。

$cfg->set_connections(array(
   'development' => 'mysql://username:password@mydomain.com/database?charset=utf8'));

を介して特殊文字 (é、ã、ç など) を含むエントリを手動で挿入する場合PhpMyAdminは問題ありませんが、 を介してエントリを挿入するとPHPActiveRecord、 を介してテーブルを参照するときに特殊文字を正しく視覚化できませんPhpMyAdmin

テーブル エントリを一覧表示してPHPページ リクエストで表示する場合、 を設定する必要がheader('Content-Type: text/html; charset=utf-8')ありますが、特殊文字を含むすべてのエントリを正しく一覧表示できます。

データベースで、または正しくPhpMyAdmin作成された特殊文字を含むエントリを一覧表示するために必要な構成はありますか?PHPActiveRecord

4

1 に答える 1

2

使用している PHP ActiveRecord のバージョン 1.0 は、「?charset=utf8」によるエンコーディングの指定をサポートしていません。v1.1 の後半に追加されました。このコミットを参照してください。

それを確認するには、php-activerecord/lib/adapters/MysqlAdapter.php のコピーを確認し、「set_encoding」を検索します。set_encoding 関数の定義が見つからない場合は、"?charset=utf8" 構成パラメーターをサポートしていない古いバージョンの PHP ActiveRecord を使用していることを意味します。

それを解決するには、少なくとも 2 つの方法があります。

A) PHP ActiveRecord の最新のナイトリー ビルドにアップグレードします。アップグレードによって既存のコードが壊れる可能性があるため、新しいバージョンのライブラリですべてを徹底的にテストするか、または

B) 接続を構成した後、次のコードを追加するだけです。

YourModel::query("SET NAMES 'utf8'");

そのモデルに関連付けられた MySQL 接続を UTF-8 文字セットを使用するように設定します。複数の MySQL 接続 (複数のデータベースへの接続など) を使用している場合は、接続ごとにそのクエリを実行します。

于 2013-12-08T19:28:15.330 に答える