」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼我的 MySQL LIKE 運算子區分大小寫,即使我的表使用 utf8_general_ci?

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

發佈於2024-11-14
瀏覽:227

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

了解MySQL 中的區分大小寫

儘管您的表被編碼為utf8_general_ci,但使用LIKE 運算符的MySQL 查詢似乎表現出區分大小寫具有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;
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3