MySQL: Diacritic Insensitive Search for Spanish Accents
Dalam pangkalan data MySQL, mengurus perkataan dengan loghat Sepanyol boleh mencabar apabila melakukan carian. Artikel ini menyediakan penyelesaian untuk mencapai carian tidak sensitif diakritik, membolehkan anda mendapatkan semula perkataan dengan atau tanpa aksen seperti yang dikehendaki.
Menyoal dengan Aksen
Sebagai contoh, pertimbangkan pertanyaan di bawah:
$result = mysql_query("SELECT * FROM $lookuptable WHERE disabled = '0' AND name LIKE '%$q%' OR productCode LIKE '%$q%' LIMIT $sugglimit");
Pertanyaan ini menyemak kedua-dua medan nama dan kod produk untuk istilah carian $q. Walau bagaimanapun, ia hanya akan mengembalikan padanan tepat, tidak termasuk perkataan dengan aksen.
Carian Tidak Peka Diakritik
Untuk mencapai carian tidak sensitif diakritik, kami boleh memanfaatkan set aksara dan himpunan. Pengumpulan mentakrifkan cara aksara dibandingkan dan sesetengah himpunan tidak sensitif diakritik.
Menukar Set Aksara
Dengan mengubah suai set aksara, kita boleh mengubah himpunan dan mendayakan diakritik carian tidak sensitif. Contohnya:
SET NAMES latin1;
Menguji Pertanyaan
Selepas menukar set aksara, kami boleh melaksanakan semula pertanyaan untuk menguji keputusan:
mysql> SET NAMES latin1; mysql> SELECT 'lápiz' LIKE 'lapiz'; +-----------------------+ | 'lápiz' LIKE 'lapiz' | +-----------------------+ | 0 | +-----------------------+
Seperti yang anda lihat, pertanyaan mengembalikan 0 walaupun perkataan "'lápiz'" mengandungi aksen. Ini kerana set aksara ditetapkan kepada latin1, iaitu sensitif huruf besar dan sensitif diakritik.
Menggunakan Pengumpulan UTF-8
Untuk mendayakan carian tidak sensitif diakritik, kita boleh menggunakan pengumpulan UTF-8. Format Transformasi Unikod (UTF) ialah skema pengekodan aksara yang mengendalikan aksara dan diakritik berbilang bait.
SET NAMES utf8;
Menjalankan semula pertanyaan dengan set aksara UTF-8:
mysql> SET NAMES utf8; mysql> SELECT 'lápiz' LIKE 'lapiz'; +-----------------------+ | 'lápiz' LIKE 'lapiz' | +-----------------------+ | 1 | +-----------------------+
Sekarang, pertanyaan mengembalikan 1, menunjukkan bahawa carian tidak sensitif diakritik.
Pertimbangan Tambahan
Untuk memastikan carian tidak sensitif diakritik untuk mana-mana set aksara, anda boleh menentukan UTF -8 pengumpulan secara eksplisit:
SELECT 'lápiz' LIKE _utf8'lapiz';
Ini menjamin bahawa pengumpulan UTF-8 digunakan untuk perbandingan, tanpa mengira set aksara semasa.
Atas ialah kandungan terperinci Bagaimanakah saya boleh melakukan carian tidak sensitif diakritik untuk aksen Sepanyol dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!