Postgresql

使用 LIKE 在語言特定字元上搜尋不區分大小寫 (PostgreSQL)

  • November 28, 2017

使用 PostgreSQL 數據庫(排序規則 C,編碼 UTF8),我們儲存來自各種語言的數據。這意味著我們還可以免費獲得特殊字元(例如 Å、å、…)

在應用程序中,我們現在要執行不區分大小寫的搜尋。這意味著如果使用者在搜尋框中鍵入“Å”,則查詢還必須考慮“å”。

但是,使用 lower(string) 或 upper(string) 方法在轉換時完全忽略此值。因此,沒有找到匹配的記錄…

有沒有辦法解決?

使用正則表達式似乎可以使用 \p{L} 來比較值,但我需要在查詢級別使用它,所以我猜這是不行的。

附帶說明:我們使用 Hibernate 來創建查詢。

unaccent

傳統的非 PG 10 方法是擴展unaccent.

CREATE EXTENSION unaccent;
SELECT 'a' = lower(unaccent('Å'));

你把它塞進一個文本搜尋配置中

WITH unaccent, french_stem;

然後神奇地你所有的 fts 東西都像說英語的人想要的那樣工作。

引用自:https://dba.stackexchange.com/questions/191888