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