了解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