Rumah >pangkalan data >tutorial mysql >Adakah PostgreSQL Menawarkan Pengumpulan Accent-Insensitive untuk Padanan Rentetan yang Cekap?

Adakah PostgreSQL Menawarkan Pengumpulan Accent-Insensitive untuk Padanan Rentetan yang Cekap?

Patricia Arquette
Patricia Arquetteasal
2025-01-20 12:36:12455semak imbas

Does PostgreSQL Offer Accent-Insensitive Collations for Efficient String Matching?

Sokongan pengumpulan "aksen-tidak sensitif" PostgreSQL

Adakah PostgreSQL menyokong pengumpulan "tidak sensitif aksen"?

Microsoft SQL Server menyediakan pengumpulan "tidak sensitif aksen" yang membenarkan pertanyaan seperti PILIH * DARI pengguna DI MANA nama SEPERTI 'João' dilaksanakan untuk mencari baris yang mengandungi nama "Joao". PostgreSQL tidak menyokong pengumpulan sedemikian secara asli.

Penyelesaian menggunakan modul tanpa aksen

PostgreSQL menyediakan modul tanpa aksen, yang mengalih keluar diakritik daripada rentetan. Untuk menggunakannya, pasang sambungan (CREATE EXTENSION tanpa aksen). Anda kemudiannya boleh melakukan carian tidak peka huruf besar-besaran seperti ini:

<code class="language-sql">SELECT * FROM users WHERE unaccent(name) = unaccent('João');</code>

Indeks Ungkapan

Untuk meningkatkan kelajuan pertanyaan, gunakan fungsi f_unaccent untuk mencipta indeks ungkapan. Ini membolehkan perancang memanfaatkan indeks untuk pertanyaan yang melibatkan penyamaran.

<code class="language-sql">CREATE INDEX users_unaccent_name_idx ON users(f_unaccent(name));</code>

PostgreSQL 12 dan koleksi ICUnya

Versi PostgreSQL yang lebih baharu (12) menyokong himpunan ICU (Komponen Antarabangsa Unicode), yang menyediakan pengumpulan dan pengisihan yang tidak sensitif aksen. Walau bagaimanapun, pengumpulan ini boleh menjejaskan prestasi. Jika anda mengutamakan prestasi, pertimbangkan untuk menggunakan penyelesaian tanpa aksen.

<code class="language-sql">CREATE COLLATION ignore_accent (provider = icu, locale = 'und-u-ks-level1-kc-true', deterministic = false);
CREATE INDEX users_name_ignore_accent_idx ON users(name COLLATE ignore_accent);
SELECT * FROM users WHERE name = 'João' COLLATE ignore_accent;</code>

Atas ialah kandungan terperinci Adakah PostgreSQL Menawarkan Pengumpulan Accent-Insensitive untuk Padanan Rentetan yang Cekap?. 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