Django 2.0 - iexact переводит НРАВИТСЯ и не ILIKE

Обновить

April 2019

Просмотры

308 раз

1

У меня есть модель, как это:

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. Но Джанго документация говорит , что будет переводить ILIKE, кто виноват?

Кстати:

  1. мой MySQL сортировки utf8_bin.

  2. MySQL обслуживается на убунту.

  3. Код работает на окнах.

1 ответы

0

The documentations says here that the SQL equivalent of iexact is ILIKE. It doesn't say iexact will translate in MySQL to ILIKE. That's also not possible at all. MySQL has no ILIKE. LIKE is already case insensitive.

In PostgreSQL, which I use, iexact translates to:

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

The difference between exact and iexact in MySQL is the following:

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

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

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

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