1

PHPActiveRecord用于管理我的数据库模型,但是我遇到了一些编码问题。

我正在使用PHPMyAdmin v3.3.10.4,MySQL client v5.0.51aPHPActiveRecord 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 函数定义,则表示您使用的是旧版本的 PHP ActiveRecord,不支持 "?charset=utf8" 配置参数。

至少有两种方法可以解决它:

A) 升级到 PHP ActiveRecord 的最新夜间版本。升级可能会破坏您现有的代码,因此请使用新版本的库彻底测试所有内容,或者

B)只需在配置连接后添加此代码:

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

它将设置与该模型关联的 MySQL 连接以使用 UTF-8 字符集。如果您使用多个 MySQL 连接(例如连接到多个数据库),请为每个连接执行该查询。

于 2013-12-08T19:28:15.330 回答