我使用PHPActiveRecord来管理数据库模型,但是遇到了一些编码问题。
我在用PHPMyAdmin v3.3.10.4MySQL client v5.0.51aPHPActiveRecord v1.0
我的连接排序规则和所有表都是用utf8_general_ci排序规则定义的。
我的PHPActiveRecord连接是这样创建的:

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

如果我通过PhpMyAdmin手动插入一个带有特殊字符(例如é,ã,ç)的条目,则没有问题,但是当我通过PHPActiveRecord插入条目时,在通过PhpMyAdmin浏览表时,我无法正确地看到特殊字符。
如果我列出我的表条目并通过PHP页面请求显示它们,我必须设置header('Content-Type: text/html; charset=utf-8'),但我可以正确列出所有带有特殊字符的条目。
是否需要对数据库进行任何配置,或PhpMyAdmin以正确列出使用PHPActiveRecord创建的特殊字符的条目?

最佳答案

您正在使用的PHPActiveRecord 1.0版不支持通过“?字符集=utf8“。稍后在v1.1中添加,请参见this commit
要验证这一点,请检查php activerecord/lib/adapters/MysqlAdapter.php的副本并搜索“set-encoding”。如果找不到set_编码函数定义,则表示您使用的是不支持“?charset=utf8“配置参数。
至少有两种解决方法:
A)升级到最新的PHP-ActiveRecord夜间版本。有可能升级会破坏你现有的代码,所以用新版本的库彻底测试所有的东西,或者
B)只需在配置连接后添加此代码:

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

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

关于php - PHPActiveRecord编码问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19602141/

10-13 00:47