Django 2.0 - iexact 翻译为 LIKE 而不是 ILIKE

Nun*_*ang 3 mysql django django-models django-orm

我有一个这样的模型:

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

    class Meta:
        db_table = 'article'
Run Code Online (Sandbox Code Playgroud)

我写了查询:

articles = Article.objects.filter(title__iexact='hello world')
print(articles.query)
Run Code Online (Sandbox Code Playgroud)

输出是:

SELECT ... FROM `article` WHERE `article`.`title` LIKE hello world
Run Code Online (Sandbox Code Playgroud)

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

顺便一提:

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

  2. mysql 在 ubuntu 上提供服务。

  3. 代码在windows上运行。

cez*_*zar 6

文档在这里说SQL 的等价物iexactILIKE. 它没有说iexact将在 MySQL 中翻译为ILIKE. 这也是根本不可能的事。MySQL 没有ILIKE. LIKE已经不区分大小写了。

在我使用的 PostgreSQL 中,iexact翻译为:

SELECT ... FROM "article" WHERE UPPER("article"."title"::text) = UPPER(hello world)
Run Code Online (Sandbox Code Playgroud)

exact和MySQL 中的区别iexact如下:

  • 文章 = 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