2013-10-26 90 views
1

我使用PHPActiveRecord來管理我的數據庫模型,但是我遇到了一些編碼問題。PHPActiveRecord編碼問題

我使用PHPMyAdmin v3.3.10.4,MySQL client v5.0.51aPHPActiveRecord v1.0。 我的連接排序規則和我所有的表都是使用utf8_general_ci排序規則定義的。

PHPActiveRecord連接是這樣創建的:

$cfg->set_connections(array(
    'development' => 'mysql://username:[email protected]/database?charset=utf8')); 

如果我手動插入特殊字符的條目(例如E,A,C)通過PhpMyAdmin,是沒有問題的,但是當我插入項通過PHPActiveRecord,當通過PhpMyAdmin瀏覽表格時,我無法正確顯示特殊字符。

如果我列出我的表條目並通過PHP頁面請求顯示它們,我必須設置header('Content-Type: text/html; charset=utf-8'),但我可以正確列出具有特殊字符的所有條目。

對於我的數據庫或PhpMyAdmin,是否有任何配置對於使用PHPActiveRecord創建的特殊字符列表條目正確?

回答

1

您正在使用的PHP ActiveRecord版本1.0不支持通過「?charset = utf8」指定編碼。它稍後在V1.1中添加,請參閱this commit

要驗證,請檢查您的副本php-activerecord/lib/adapters/MysqlAdapter.php並搜索「set_encoding」。如果您找不到set_encoding函數定義,則表示您使用的舊版本的PHP ActiveRecord不支持「?charset = utf8」配置參數。

至少有2種方式來解決這個問題:

A)升級到PHP的ActiveRecord的最新的每日構建。還有一種可能的升級將打破現有的代碼,因此與庫的新版本全面測試的一切,或

B)只要您配置了連接後添加以下代碼:

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

這將設置與該模型關聯的MySQL連接使用UTF-8字符集。如果您使用多個MySQL連接(例如,連接到多個數據庫),請爲每個連接執行該查詢。