->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 不能为这类查询使用索引,因此它们在大型表上通常会很慢。
我有这样的查询:
$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 不能为这类查询使用索引,因此它们在大型表上通常会很慢。