Microsoft SQL Server menyediakan pengumpulan "tidak sensitif aksen", membenarkan pertanyaan seperti SELECT * FROM users WHERE name LIKE 'João'
dilaksanakan untuk mendapatkan semula baris dengan nama "Joao".
PostgreSQL menyediakan modul tanpa aksen, yang mengalih keluar diakritik daripada rentetan. Untuk menggunakannya, pasang sambungan dan gunakan fungsi unaccent()
:
SELECT * FROM users WHERE unaccent(name) = unaccent('João');
Untuk mempercepatkan pertanyaan, buat indeks ungkapan:
CREATE INDEX users_unaccent_name_idx ON users(unaccent(name));
Ingat untuk melayakkan fungsi dan kamus dalam mod atas sebab keselamatan:
CREATE OR REPLACE FUNCTION public.f_unaccent(text) RETURNS text LANGUAGE sql IMMUTABLE PARALLEL SAFE STRICT AS $func$ SELECT public.immutable_unaccent('public.unaccent', ) -- 限定函数和字典的模式 $func$; CREATE INDEX users_unaccent_name_idx ON users(public.f_unaccent(name));
Dalam PostgreSQL 9.6 dan lebih baru, unaccent()
mengembangkan ligatur dengan betul, menukar "Œ" kepada "OE" dan "ß" kepada "ss".
Menggunakan unaccent
bersama dengan modul pg_trgm
membolehkan anda melakukan padanan corak sewenang-wenangnya menggunakan LIKE
atau ILIKE
dan mencipta indeks ekspresi GIN atau GIST tiga kali ganda.
Untuk memudahkan, pertimbangkan untuk menggunakan pengindeksan triplet untuk corak berlabuh kiri.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melakukan Pertanyaan Tidak Sensitif Aksen dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!