我正在使用PHPActiveRecord
来管理我的数据库模型,但是我遇到了一些编码问题。
我正在使用PHPMyAdmin v3.3.10.4
,MySQL 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
创建的特殊字符的条目?
您正在使用的 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连接(例如连接到多个数据库),请为每个连接执行该查询。