ホームページ >データベース >mysql チュートリアル >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 サイトの他の関連記事を参照してください。