Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mencapai Carian Tidak Sensitif Aksen dalam PostgreSQL?

Bagaimanakah Saya Boleh Mencapai Carian Tidak Sensitif Aksen dalam PostgreSQL?

Linda Hamilton
Lepaskan: 2025-01-20 12:21:17
asal
458 orang telah melayarinya

How Can I Achieve Accent-Insensitive Searches in PostgreSQL?

Pendekatan PostgreSQL untuk Carian Tidak Sensitif Aksen

Tidak seperti sesetengah pangkalan data (seperti Microsoft SQL Server), PostgreSQL tidak menyokong himpunan tidak sensitif aksen secara asli. Walaupun PostgreSQL 12 memperkenalkan himpunan ICU bukan deterministik yang menawarkan ketidakpekaan kes dan aksen, ini disertakan dengan pertukaran prestasi dan sekatan operasi.

Strategi untuk Pertanyaan Tidak Sensitif Aksen dalam PostgreSQL

Beberapa kaedah wujud untuk mencapai carian tidak sensitif aksen dalam PostgreSQL:

1. Modul unaccent:

Modul ini menyediakan fungsi unaccent(), mengalih keluar aksen daripada rentetan. Ini membenarkan pertanyaan seperti:

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

Walau bagaimanapun, unaccent() tidak BOLEH UBAH, menghalang penggunaannya dalam indeks ungkapan dan ia tidak mengembangkan ligatur (cth., 'Œ').

2. Pembalut Fungsi C Dioptimumkan:

Untuk menangani batasan unaccent(), penyelesaian yang lebih cekap melibatkan mencipta pembungkus fungsi C TIDAK BOLEH:

<code class="language-sql">CREATE OR REPLACE FUNCTION public.f_unaccent(text)
  RETURNS text
  LANGUAGE sql IMMUTABLE PARALLEL SAFE STRICT
RETURN public.immutable_unaccent(regdictionary 'public.unaccent', );</code>
Salin selepas log masuk

Ini membolehkan penciptaan indeks ekspresi:

<code class="language-sql">CREATE INDEX users_unaccent_name_idx ON users(public.f_unaccent(name));</code>
Salin selepas log masuk

Pertanyaan kemudian gunakan fungsi yang dibalut:

<code class="language-sql">SELECT * FROM users WHERE f_unaccent(name) = f_unaccent('João');</code>
Salin selepas log masuk

3. Memanfaatkan pg_trgm untuk Padanan Corak dan Pengikat:

Untuk padanan corak dan pengendalian ligatur yang lebih fleksibel, modul pg_trgm dengan indeks trigram menawarkan penyelesaian yang berkuasa. Indeks GIN trigram membolehkan carian tidak sensitif huruf besar dan pengesanan persamaan:

<code class="language-sql">CREATE INDEX users_unaccent_name_trgm_idx ON users
USING gin (f_unaccent(name) gin_trgm_ops);

SELECT * FROM users WHERE f_unaccent(name) LIKE ('%' || f_unaccent('João') || '%');</code>
Salin selepas log masuk

Perhatikan bahawa pg_trgm indeks lebih intensif sumber berbanding indeks B-tree standard.

Memilih pendekatan optimum bergantung pada keperluan khusus aplikasi anda, mengimbangi prestasi pertanyaan dengan kos penyelenggaraan indeks dan keperluan untuk pengendalian ligatur.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencapai Carian Tidak Sensitif Aksen dalam PostgreSQL?. 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