postgresql - Symfony2 LOWER DQL 函数和 Character not in repertoire 错误

标签 postgresql symfony doctrine-orm sql-like

我正在使用 Symfony 2.3 和 PostgreSQL 9.2。我只想根据复选框的值执行两个简单的查询。这样的查询是:

1) SELECT * FROM table WHERE field LIKE 'Something'
2) SELECT * FROM table WHERE field ILIKE 'Something' 

如您所知,第一个区分大小写,而第二个不区分大小写。 我知道在 Doctrine ILIKE 中不存在,我应该使用 LOWER 函数。 但是,如果我在查询中指定了一些特殊字符(例如“è”),则在使用不区分大小写的版本(即使用 LOWER 函数时)时会出现错误。

特别是,我得到的错误如下:

SQLSTATE[22021]: Character not in repertoire: 7 ERROR: invalid byte sequence for encoding "UTF8": 0xe3 0xa8 0x20

当我不使用 LOWER 函数时一切正常。 我已经检查了编码,数据库和 PostgreSQL 的 client_encoding 参数都是 UTF8。

有什么建议吗?谢谢

最佳答案

这是谷歌的第一个结果,但没有答案。

答案: 如果您在网站上使用 UTF-8 编码(或其他多字节编码),则必须使用带有 'mb' 的 PHP 函数来处理文本。

我遇到了这个问题:

$qb = $this->createQueryBuilder('cf');
$qb->select(['cf'])
    ->where($qb->expr()->orX(
        'LOWER(cf.name) LIKE :searchName',
        'LOWER(cf.address) LIKE :searchName',
        'LOWER(cf.city) LIKE :searchName',
        'LOWER(cf.zipCode) LIKE :searchName'
        ));
$qb->setParameter('searchName', '%' . strtolower($searchName) . '%');

您只需将 strtolower 替换为 mb_strtolower

关于postgresql - Symfony2 LOWER DQL 函数和 Character not in repertoire 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23857934/

相关文章:

symfony - 如何使用解耦的 symfony 组件?

php - Symfony2 自定义存储库类

javascript - 如何在 bundle 之间共享 CSS 和 JS

mysql - 更新架构时 Doctrine 添加现有外键(mysql)

symfony - 使用连接表更新学说

ruby-on-rails - ActiveRecord 查询(包含或加入)

javascript - 使用 PostgreSQL 选择查询的 Knex 在多个并行请求上性能极度下降

postgresql - postgres安装数据库集群初始化失败(Postgresql Version 9.4.4)

web-services - 玩!框架异步调用修改数据库的相同对象

与实体管理器多次合并后,Symfony/Doctrine实体会导致脏实体关联