我一直在尝试开始使用 Phalcon,但几天来我一直在尝试对我的数据库进行查询。如果找不到此问题的解决方案,我将不得不继续前进。
目标表使用 inno-db 并且是 utf-8 编码的。表有两列:一列是索引值,另一列是单个(唯一)东亚字符。当尝试使用 utf-8 编码的汉字检索记录时,Phalcon 返回 0 条记录。此外,当使用索引值检索记录时,相应的字符值将作为问号(常规问号,而不是浏览器用作无法识别字符的占位符的问号)返回。
$characters = Characters::find("indCharacter = 乱");
返回此错误:
"PhalconException: Scanning error before '��' when parsing: SELECT [Characters].* FROM [Characters] WHERE indCharacter = 乱 (64)"
在实际字符周围使用单引号返回 0 个结果。
我使用命令行、phpmyadmin 和工作台运行了完全相同的查询,所有这些都在相同的环境中。所有正确返回的记录。
我还仔细检查了原始查询值是 utf-8 编码的,并且表中的所有数据都是 utf-8 编码的。
Phalcon:1.2.6
PHP: 5.4.11
最佳答案
当使用 Phalcon 的 Pdo Mysql 适配器创建数据库连接时,您必须明确设置字符编码。这是一个类似于 Phalcon 教程中的示例,只是我添加了 "charset"
。
$di->set('db', function() use ($config) {
return new \Phalcon\Db\Adapter\Pdo\Mysql(array(
"host" => "myhost",
"username" => "myusername",
"password" => "mypassword",
"dbname" => "mydbname",
"charset" => "utf8"
));
});
我之前查看过各种适配器类的文档,但找不到任何与设置数据库连接编码相关的信息。我(错误地)假设编码检测是在内部处理的。
关于php - 无法使用 Phalcon 从 MySql 返回汉字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21688981/