首頁 > 資料庫 > mysql教程 > PostgreSQL 是否提供不區分重音的排序規則以實現高效的字串匹配?

PostgreSQL 是否提供不區分重音的排序規則以實現高效的字串匹配?

Patricia Arquette
發布: 2025-01-20 12:36:12
原創
451 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板