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

Django 2.0中iexact被转成LIKE而非ILIKE,与文档不符?

问题解答:Django iexact 查询在MySQL下转为 LIKE 而非 ILIKE 的原因

其实这事儿两边都没毛病,是Django针对不同数据库的特性做的适配逻辑而已,具体来说:

  • ILIKE 是PostgreSQL专属语法:MySQL本身并不支持 ILIKE 这个关键字,它的不区分大小写匹配是靠带_ci后缀的排序规则(比如你用到的utf8_general_ci、utf8_unicode_ci这类)来实现的——当表或字段使用这种排序规则时,普通的LIKE查询就会自动忽略大小写,效果和PostgreSQL的ILIKE完全一致。
  • Django会自动适配数据库语法:Django的ORM设计就是为了屏蔽不同数据库的语法差异。当你使用PostgreSQL作为后端时,iexact会被转换成ILIKE;而当你切换到MySQL时,Django知道MySQL不支持ILIKE,就会自动转换成LIKE,同时依赖MySQL的排序规则来实现不区分大小写的匹配,这完全符合官方文档的设计意图(文档里说的ILIKE是针对PostgreSQL的情况)。

你可以实际测试一下:用iexact='hello world'查询时,不管输入的是Hello World还是HELLO WORLD,只要你的排序规则是_ci结尾的,都能被匹配到,这说明功能是正常的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:15:11