我正在使用 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/