Rumah >pangkalan data >tutorial mysql >Mengapa MySQL LIKE Operator Case Sensitif Apabila Menggunakan Rentetan Binari?

Mengapa MySQL LIKE Operator Case Sensitif Apabila Menggunakan Rentetan Binari?

Barbara Streisand
Barbara Streisandasal
2024-11-07 19:00:03531semak imbas

Why is MySQL's LIKE Operator Case Sensitive When Using a Binary String?

Sensitiviti Kes dengan LIKE dalam MySQL

Semasa melakukan carian LIKE dalam MySQL menggunakan pertanyaan "SELECT concat_ws(title,description) as concatenated SETELAH digabungkan SEPERTI '%SearchTerm%';", mungkin diperhatikan bahawa carian adalah sensitif huruf besar-besaran, walaupun jadual dikodkan menggunakan pengumpulan utf8_general_ci dan enjin storan MyISAM.

Sebab bagi tingkah laku ini ialah kerana operator LIKE melakukan perbandingan sensitif huruf besar-besaran apabila salah satu operan ialah rentetan binari. Dalam kes ini, medan "bercantum" ialah rentetan perduaan, menyebabkan carian menjadi sensitif huruf besar dan kecil.

Untuk menyelesaikan isu ini dan menjadikan carian tidak sensitif huruf besar-kecil, disyorkan untuk menggunakan kata kunci BINARI dengan LIKE operator:

SELECT .... FROM .... WHERE `concatenated` LIKE BINARY '%SearchTerm%';

Ini memastikan bahawa perbandingan rentetan dilakukan secara binari, mengabaikan sebarang perbezaan kes.

Sebagai alternatif, kata kunci COLLATE boleh digunakan bersama-sama dengan pengumpulan utf8_bin untuk membuat carian tidak sensitif huruf besar/kecil:

SELECT ....
FROM ....
WHERE `concatenated` like '%SearchTerm%' COLLATE utf8_bin;

Kedua-dua kaedah ini mengubah suai gelagat carian dengan berkesan, menjadikannya tidak sensitif huruf besar dan kecil sambil mengekalkan manfaat prestasi himpunan utf8_general_ci.

Atas ialah kandungan terperinci Mengapa MySQL LIKE Operator Case Sensitif Apabila Menggunakan Rentetan Binari?. 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