Rumah >pangkalan data >tutorial mysql >Mengapa pengendali MySQL LIKE saya sensitif huruf besar-kecil walaupun jadual saya menggunakan utf8_general_ci?
Memahami Kepekaan Kes dalam MySQL
Pertanyaan MySQL anda menggunakan operator LIKE nampaknya mempamerkan kepekaan kes, walaupun jadual anda dikodkan sebagai utf8_general_ci dengan enjin storan MyISAM. Tingkah laku ini boleh membingungkan dan memahami punca asas adalah penting untuk menyelesaikan isu itu.
Perbandingan Rentetan Perduaan vs. Bukan Perduaan:
Kunci untuk memahami perkara ini tingkah laku terletak pada perbezaan antara perbandingan rentetan binari dan bukan binari. Secara lalai, MySQL melakukan perbandingan rentetan bukan binari, yang peka huruf besar-kecil untuk kebanyakan set aksara, termasuk utf8_general_ci.
Membetulkan Kepekaan Kes dengan Perbandingan Binari:
Untuk menyelesaikan isu sensitiviti kes, anda boleh mengubah suai pertanyaan anda untuk menggunakan perbandingan rentetan binari. Ini dicapai dengan memberi awalan operan kanan operator LIKE dengan kata kunci BINARI. Pertanyaan yang diperbetulkan akan kelihatan seperti:
SELECT concat_ws(title,description) as concatenated HAVING concatenated LIKE BINARY '%SearchTerm%';
Pengubahsuaian ini memaksa MySQL menggunakan perbandingan rentetan binari, yang tidak peka huruf besar-kecil.
Penyelesaian Alternatif Menggunakan COLLATE:
Pendekatan alternatif untuk mencapai perbandingan rentetan tidak peka huruf besar-besaran ialah menggunakan klausa COLLATE. Klausa COLLATE menentukan set aksara dan peraturan pengumpulan untuk digunakan pada perbandingan rentetan. Dengan menentukan pengumpulan utf8_bin, anda boleh memaksa MySQL untuk menggunakan perbandingan rentetan binari. Pertanyaan menggunakan COLLATE ialah:
SELECT .... FROM .... WHERE `concatenated` LIKE '%SearchTerm%' COLLATE utf8_bin;
Atas ialah kandungan terperinci Mengapa pengendali MySQL LIKE saya sensitif huruf besar-kecil walaupun jadual saya menggunakan utf8_general_ci?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!