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
Lepaskan: 2025-01-20 12:36:12
asal
497 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan