(SQL ilike)使用土耳其字符'ı'和'I'搜索时无法获得所需的结果



我有一个SQL查询,下面给出

select * from drivers d
where d.surname ilike concat('%', '$2::text, '%')

问题是在土耳其语中,字母"i"有冲突的字母。小写的"I"是"' '",大写的"I"是"İ"。当我试着搜索一个包含小写' ' '的单词时,我找不到包含大写' ' i '的单词,反之亦然。例如,如果我想搜索'akın',我无法获得包含'AKIN'的结果,或者如果我搜索'AKIN',我无法获得包含'akın'的结果。我怎样才能让它工作?有什么方法可以给文化之类的吗?

我尝试使用正则表达式,但我找不到解决方案。

您必须确保使用土耳其语排序:

SELECT 'akın' ILIKE '%AKIN%' COLLATE "tr_TR.utf8";
?column? 
══════════
t
(1 row)

要加速这样的查询,您需要一个三元组索引:

CREATE EXTENSION IF NOT EXISTS pg_trgm;
CREATE INDEX ON drivers USING gin (surname gin_trgm_ops);

最新更新