Microsoft SQL Server は「アクセントを区別しない」照合順序を提供し、SELECT * FROM users WHERE name LIKE 'João'
のようなクエリを実行して「Joao」という名前の行を取得できます。
PostgreSQL は、文字列から発音記号を削除する unaccent モジュールを提供します。これを使用するには、拡張機能をインストールし、unaccent()
関数を使用します:
<code class="language-sql">SELECT * FROM users WHERE unaccent(name) = unaccent('João');</code>
クエリを高速化するには、式インデックスを作成します:
<code class="language-sql">CREATE INDEX users_unaccent_name_idx ON users(unaccent(name));</code>
安全上の理由から、必ずモードで関数と辞書を修飾してください:
<code class="language-sql">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));</code>
PostgreSQL 9.6 以降では、unaccent()
は合字を正しく展開し、「ā」を「OE」に、「ß」を「ss」に変換します。
unaccent
モジュールと組み合わせて pg_trgm
を使用すると、LIKE
または ILIKE
を使用して任意のパターン マッチングを実行し、トリプレット GIN または GIST 式インデックスを作成できます。
簡単にするために、左アンカー パターンにトリプレット インデックスを使用することを検討してください。
以上がPostgreSQL でアクセントを区別しないクエリを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。