首頁 >資料庫 >mysql教程 >為什麼我的 MySQL LIKE 運算子區分大小寫,即使我的表使用 utf8_general_ci?

為什麼我的 MySQL LIKE 運算子區分大小寫,即使我的表使用 utf8_general_ci?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-08 19:30:02510瀏覽

Why is my MySQL LIKE operator case-sensitive even though my table uses utf8_general_ci?

了解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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn