关于php:Drupal 7 – 与db_select不区分大小写

Drupal 7 - case-insensitive LIKE with db_select

使用MySQL和Drupal7,我不能让查询不区分大小写。以下是我的模块代码:

1
2
3
4
5
$results = db_select('people_table', 'p')->fields('p');
if (array_key_exists('department', $_GET)) {
    $results->condition('Department', '%' . db_like($_GET['department']) . '%', 'LIKE');
}
return $results->orderBy('Name', 'ASC')->execute();

在URL中使用?department=Chemistry,我得到了三个结果。在URL中使用?department=Chemistry,我没有得到任何结果。当我尝试$results->condition('UPPER(Department)'...时,我得到了这个错误:

PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'UPPERDepartment' in 'where clause': SELECT p.* FROM {people_table} p WHERE (UPPERDepartment LIKE :db_condition_placeholder_0 ESCAPE '\\') ORDER BY Name ASC;

所以它好像吃了我的圆括号。我该怎么做一个不区分大小写的LIKE

编辑:Department列及整表的排序规则为utf8_bin。这个答案说"唯一特别的一个是utf8-bin,它用于比较二进制格式的字符。"我不知道为什么选择了这个排序规则,因为表中的所有数据都是英文文本。我可以把排序规则改为utf8_-general_-ci。


什么是部门字段的排序?,对于Ex utf8_unicode_ci,它应该带有前缀*_ci(不区分大小写)


您可以使用where方法添加自定义where子句,而不是使用condition

1
$results->where('UPPER(Department)'...