使用 PostgreSQL 数据库(排序规则 C,编码 UTF8),我们存储来自各种语言的数据。这意味着我们还可以免费获得特殊字符(例如 Å、å、...)
在应用程序中,我们现在要执行不区分大小写的搜索。这意味着如果用户在搜索框中键入“Å”,则查询还必须考虑“å”。
但是,使用 lower(string) 或 upper(string) 方法在转换时完全忽略此值。因此,没有找到匹配的记录...
有没有办法解决?
使用正则表达式似乎可以使用 \p{L} 来比较值,但我需要在查询级别使用它,所以我猜这是不行的。
附带说明:我们使用 Hibernate 来创建查询。
unaccent
传统的非 PG 10 方法是扩展
unaccent
.你把它塞进一个文本搜索配置中
然后神奇地你所有的 fts 东西都像说英语的人想要的那样工作。