ホームページ >データベース >mysql チュートリアル >PostgreSQL は効率的な文字列照合のためにアクセントを区別しない照合順序を提供しますか?

PostgreSQL は効率的な文字列照合のためにアクセントを区別しない照合順序を提供しますか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-20 12:36:12452ブラウズ

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

PostgreSQL の「アクセントを区別しない」照合順序のサポート

PostgreSQL は「アクセントを区別しない」照合順序をサポートしていますか?

Microsoft SQL Server は、SELECT * FROM users WHERE name LIKE 'João' などのクエリを実行して、名前「Joao」を含む行を検索できる「アクセントを区別しない」照合順序を提供します。 PostgreSQL は、そのような照合順序をネイティブにサポートしていません。

アクセントのないモジュールを使用した解決策

PostgreSQL は、文字列から発音記号を削除する unaccent モジュールを提供します。これを使用するには、拡張機能をインストールします (CREATE EXTENSION unaccent)。次に、次のように大文字と小文字を区別しない検索を実行できます:

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

式インデックス

クエリ速度を向上させるには、 f_unaccent 関数を使用して式インデックスを作成します。これにより、プランナはアクセントの解除を伴うクエリに対してインデックスを利用できるようになります。

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

PostgreSQL 12 とその ICU 照合順序

新しい PostgreSQL バージョン (12) は、アクセントを区別しないグループ化と並べ替えを提供する ICU (International Component of Unicode) 照合順序をサポートしています。ただし、これらの照合順序はパフォーマンスに影響を与える可能性があります。パフォーマンスを優先する場合は、アクセントのないソリューションの使用を検討してください。

<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>

以上がPostgreSQL は効率的な文字列照合のためにアクセントを区別しない照合順序を提供しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。