Rumah >pangkalan data >tutorial mysql >Mengapa MySQL LIKE Queries Case-Sensitive dengan Pengekodan utf8_general_ci?

Mengapa MySQL LIKE Queries Case-Sensitive dengan Pengekodan utf8_general_ci?

Susan Sarandon
Susan Sarandonasal
2024-11-09 18:05:02457semak imbas

Why are MySQL LIKE Queries Case-Sensitive with utf8_general_ci Encoding?

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!

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