2016-07-22 33 views
0

我有一個查詢,像這樣:- >其中()的條款似乎是區分大小寫

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

位置在哪裏等於belgrade和數據庫列說Belgrade

它似乎是區分大小寫(使用=或LIKE),所以如果我搜索Belgrade我得到一個結果,但如果我搜索belgrade我沒有得到任何結果。

如何使其不區分大小寫?

+0

列的整理是什麼?那定義了*默認*比較方法... – deceze

+0

表/列整理「ci」還是「cs」? – Andrew

+0

嘗試'orWhere('LOWER(qCity)','LIKE','%'。strtolower($ location)。'%');'(你可能需要做一個'\ DB:raw') – apokryfos

回答

0

默認字符集和校對規則是LATIN1和 latin1_swedish_ci,所以非二進制字符串比較是區分 默認情況下不區分大小寫。這意味着如果您使用col_name LIKE'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不能爲這些查詢使用索引,因爲它們通常會在大型表上變慢。

+0

表的整理似乎是utf8_bin,它可以在SQL中更改,以便它becimes ci? – user6562256

+0

我不推薦它。你可能有不少城市名字,不帶有ascii字符。如果你這樣做,它們會變成亂碼。最好爲每個查詢進行排序。 – e4c5

+0

好的,謝謝。不幸的是,COLLATE thingy在您的示例中不起作用。 – user6562256

相關問題