You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF Core+PostgreSQL大小写不敏感查询报错,求解决方案

解决EF Core + PostgreSQL字符串大小写不敏感查询报错问题

方法1:使用PostgreSQL原生ILIKE函数(推荐)

直接替换Contains为EF Core提供的EF.Functions.ILike方法,PostgreSQL的ILIKE原生支持大小写不敏感模糊匹配,完全避开排序规则相关的子串搜索限制:

var b = await _uow.SysHistoryRepository.FirstOrDefaultAsync(x => EF.Functions.ILike(x.TableName, "%Sirket%"));
var a = await _uow.SysHistoryRepository.FirstOrDefaultAsync(x => EF.Functions.ILike(x.TableName, "%sirket%"));

该方法生成的SQL会使用ILIKE操作符,无需依赖全局排序规则,执行效率和兼容性都更好。

方法2:调整排序规则的确定性设置

当前配置的en-u-ks-primary是大小写不敏感的ICU排序规则,但PostgreSQL不允许在确定性排序规则上执行子串搜索操作。可以尝试将排序规则的deterministic参数设为false:

修改OnModelCreating中的排序规则定义:

modelBuilder.HasCollation("my_collation", locale: "en-u-ks-primary", provider: "icu", deterministic: false);

注意:非确定性排序规则会导致索引效率降低,且部分字符串操作的行为会变化,仅在必须依赖排序规则实现大小写不敏感时使用。

方法3:列级排序规则配置(局限性较大)

若需通过排序规则实现,可以针对单个列单独设置大小写不敏感排序规则,同时创建对应索引,但Contains这类子串搜索仍可能受PostgreSQL限制,因此不推荐作为首选方案。

内容的提问来源于stack exchange,提问作者Hakan Kaban

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 00:47:20