我使用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'),但是我可以正确地列出所有带有特殊字符的项。
为了正确列出用PHPActiveRecord创建的带有特殊字符的条目,我必须在我的数据库或PhpMyAdmin上进行配置吗?
发布于 2013-12-09 03:28:15
您正在使用的PHP1.0版本的ActiveRecord不支持通过"?charset=utf8“指定编码。它是后来在v1.1中添加的,请参阅this commit。
要验证这一点,请检查您的php-activerecord/lib/adapters/MysqlAdapter.php副本并搜索"set_encoding“。如果您找不到set_encoding函数定义,这意味着您使用的是不支持"?charset=utf8“配置参数的旧版本的PHP ActiveRecord。
至少有两种方法可以解决:
A)升级到PHP ActiveRecord的每晚最新版本。升级可能会破坏您现有的代码,因此请使用新版本的库彻底测试所有内容,或者
B)只需在配置连接后添加以下代码:
YourModel::query("SET NAMES 'utf8'");它会将与该模型关联MySQL连接设置为使用UTF8字符集。如果您使用多个MySQL连接(例如,连接到多个数据库),请对每个连接执行该查询。
https://stackoverflow.com/questions/19602141
复制相似问题