->where() 子句似乎区分大小写

->where() clauses seem to be case sensitive

我有这样的查询:

$profilesx->where('qZipCode', $location)->
                        orWhere('qCity', 'LIKE', '%'.$location.'%');

位置等于 belgrade,数据库列显示 Belgrade

它似乎区分大小写(使用 = 或 LIKE)所以如果我搜索 Belgrade 我会得到一个结果但是如果我搜索 belgrade 我不会得到任何结果。

如何让它不区分大小写?

这通常是数据库的排序规则设置。您需要将其设置为不区分大小写的排序规则类型。

阅读此 link 了解更多信息:

http://dev.mysql.com/doc/refman/5.7/en/case-sensitivity.html

The default character set and collation are latin1 and latin1_swedish_ci, so nonbinary string comparisons are case insensitive by default. This means that if you search with col_name LIKE 'a%', you get all column values that start with A or a. To make this search case sensitive, make sure that one of the operands has a case sensitive or binary collation. For example, if you are comparing a column and a string that both have the latin1 character set, you can use the COLLATE operator to cause either operand to have the latin1_general_cs or latin1_bin collation:

来源:http://dev.mysql.com/doc/refman/5.7/en/case-sensitivity.html

实际发生的是区分大小写已被关闭(这不一定是坏事)。该文档的下一部分给出了解决方案。试试像

orWhere('qCity', 'COLLATE latin1_general_cs LIKE', '%'.$location.'%');

如果 laravel 不喜欢它,您将不得不使用原始查询或更改列的排序规则设置。

附带说明一下,如果可以,尽量避免 LIKE %something% 查询。 Mysql 不能为这类查询使用索引,因此它们在大型表上通常会很慢。