Rumah >pangkalan data >tutorial mysql >Mengapa pengendali MySQL LIKE saya sensitif huruf besar-kecil walaupun jadual saya menggunakan utf8_general_ci?

Mengapa pengendali MySQL LIKE saya sensitif huruf besar-kecil walaupun jadual saya menggunakan utf8_general_ci?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-08 19:30:02510semak imbas

Why is my MySQL LIKE operator case-sensitive even though my table uses 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn