Django 2.0 - iexact 转换为 LIKE 而不是 ILIKE

Django 2.0 - iexact translates to LIKE and not ILIKE

我有这样一个模型:

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()

    class Meta:
        db_table = 'article'

然后我编写查询:

articles = Article.objects.filter(title__iexact='hello world')
print(articles.query)

输出为:

SELECT ... FROM `article` WHERE `article`.`title` LIKE hello world

可以看到iexact被翻译成了LIKE。但是django文档说它会翻译成ILIKE,谁错了?

顺便说一句:

  1. 我的 mysql 排序规则是 utf8_bin。

  2. mysql 服务于 ubuntu。

  3. 代码是 运行 windows。

文档说 here iexact 的 SQL 等价于 ILIKE。它并没有说 iexact 会在 MySQL 中转换为 ILIKE。那也是根本不可能的。 MySQL 没有 ILIKELIKE 已经不区分大小写。

在我使用的 PostgreSQL 中,iexact 转换为:

SELECT ... FROM "article" WHERE UPPER("article"."title"::text) = UPPER(hello world)

MySQL中exactiexact的区别如下:

  • 文章 = Article.objects.filter(title__iexact='hello world')

... WHERE `articles`.`title` LIKE hello world

  • 文章 = Article.objects.filter(title__exact='hello world')

... WHERE `articles`.`title` = hello world