Postgresql
使用 LIKE 在語言特定字元上搜尋不區分大小寫 (PostgreSQL)
使用 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 東西都像說英語的人想要的那樣工作。