首頁 >資料庫 >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 本身並不支援此類排序規則。

使用 unaccent 模組的解決方案

PostgreSQL 提供 unaccent 模組,該模組可從字串中刪除變音符號。要使用它,請安裝擴充功能(CREATE EXTENSION unaccent)。然後,您可以執行如下所示的不區分大小寫的搜尋:

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

表達式索引

為了提高查詢速度,請使用 f_unaccent 函數建立表達式索引。這允許規劃器利用索引來處理涉及 unaccenting 的查詢。

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

PostgreSQL 12 及其 ICU 排序規則

較新的 PostgreSQL 版本(12 )支援 ICU(Unicode 國際組件)排序規則,這些排序規則提供重音不敏感的分組和排序。但是,這些排序規則可能會影響效能。如果您優先考慮效能,請考慮使用 unaccent 解決方案。

<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn