Rumah >pangkalan data >tutorial mysql >Mengapa MySQL LIKE Queries Case-Sensitive dengan Pengekodan utf8_general_ci?
Sensitiviti Kes dalam MySQL LIKE Query
Masalah:
Pertimbangkan pertanyaan MySQL berikut:
SELECT concat_ws(title, description) as concatenated HAVING concatenated LIKE '%SearchTerm%';
Walaupun menggunakan operator LIKE, carian kelihatan seperti kes sensitif apabila pengekodan jadual adalah utf8_general_ci dengan enjin storan MyISAM.
Penjelasan:
Enjin storan MyISAM menggunakan perbandingan tidak sensitif huruf besar-besaran untuk rentetan yang disimpan dalam pengekodan utf8_general_ci. Walau bagaimanapun, pengendali LIKE melakukan perbandingan sensitif huruf besar-besaran secara lalai.
Penyelesaian Optimum:
Untuk melakukan perbandingan tidak sensitif huruf besar-besaran, gunakan kata kunci BINARI seperti berikut:
SELECT .... FROM .... WHERE `concatenated` LIKE BINARY '%SearchTerm%';
Perbandingan rentetan menjadi sensitif huruf besar apabila salah satu operan ialah binari rentetan.
Penyelesaian Alternatif:
Sebagai alternatif, gunakan pernyataan COLLATE untuk menentukan himpunan khusus setempat:
SELECT .... FROM .... WHERE `concatenated` like '%SearchTerm%' COLLATE utf8_bin;
Pendekatan ini membolehkan perbandingan tidak sensitif huruf kecil sambil mengekalkan pengekodan aksara asal.
Atas ialah kandungan terperinci Mengapa MySQL LIKE Queries Case-Sensitive dengan Pengekodan utf8_general_ci?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!