了解MySQL 中的區分大小寫
使用LIKE 運算子的MySQL 查詢似乎表現出區分大小寫,儘管您的表被區分編碼為utf8_general_ci具有MyISAM儲存引擎。這種行為可能令人費解,了解根本原因對於解決問題至關重要。
二進位與非二進位字串比較:
理解這一點的關鍵行為在於二進位和非二進位字串比較之間的區別。預設情況下,MySQL 執行非二進位字串比較,這對於大多數字元集都區分大小寫,包括 utf8_general_ci。
透過二元比較修復區分大小寫:
要解決區分大小寫問題,您可以修改查詢以使用二進位字串比較。這是透過在 LIKE 運算子的右側運算元前新增 BINARY 關鍵字來實現的。修正後的查詢如下所示:
SELECT concat_ws(title,description) as concatenated HAVING concatenated LIKE BINARY '%SearchTerm%';
此修改強制 MySQL 使用不區分大小寫的二進位字串比較。
使用 COLLATE 的替代解決方案:
實現不區分大小寫的字串比較的另一種方法是使用 COLLATE 子句。 COLLATE 子句指定要套用於字串比較的字元集和排序規則。透過指定 utf8_bin 排序規則,您可以強制 MySQL 使用二進位字串比較。使用 COLLATE 的查詢將是:
SELECT .... FROM .... WHERE `concatenated` LIKE '%SearchTerm%' COLLATE utf8_bin;
以上是為什麼我的 MySQL LIKE 運算子區分大小寫,即使我的表使用 utf8_general_ci?的詳細內容。更多資訊請關注PHP中文網其他相關文章!