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

时间:2016-07-22 09:52:13

标签: php mysql laravel-5 where-clause fluent

我有这样的查询:

BaseDimension

位置等于$profilesx->where('qZipCode', $location)-> orWhere('qCity', 'LIKE', '%'.$location.'%'); ,数据库列显示belgrade

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

如何使其不区分大小写?

2 个答案:

答案 0 :(得分:0)

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

请阅读此链接以获取更多信息:

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

答案 1 :(得分:0)

  

默认字符集和排序规则是latin1和   latin1_swedish_ci,所以非二进制字符串比较就是这种情况   默认情况下不敏感。这意味着如果使用col_name进行搜索   像LI' a%',您获得以A或a开头的所有列值。要做   这个搜索大小写敏感,确保其中一个操作数有一个   区分大小写或二进制排序规则。例如,如果您正在进行比较   一个列和一个字符串都有latin1字符集,你可以   使用COLLATE运算符使任一操作数具有   latin1_general_cs或latin1_bin整理:

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

实际发生的是案例敏感性已被关闭(这不是一件坏事)。该解决方案在该文档的下一部分中给出。尝试像

这样的东西
orWhere('qCity', 'COLLATE latin1_general_cs LIKE', '%'.$location.'%');

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

作为旁注,如果可以的话,尽量避免LIKE%某些%查询。 Mysql不能为这些类型的查询使用索引,因此它们在大型表上通常会很慢。