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,谁错了?
顺便说一句:
我的 mysql 排序规则是 utf8_bin。
mysql 服务于 ubuntu。
代码是 运行 windows。
文档说 here iexact
的 SQL 等价于 ILIKE
。它并没有说 iexact
会在 MySQL 中转换为 ILIKE
。那也是根本不可能的。 MySQL 没有 ILIKE
。 LIKE
已经不区分大小写。
在我使用的 PostgreSQL 中,iexact
转换为:
SELECT ... FROM "article" WHERE UPPER("article"."title"::text) = UPPER(hello world)
MySQL中exact
和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
我有这样一个模型:
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,谁错了?
顺便说一句:
我的 mysql 排序规则是 utf8_bin。
mysql 服务于 ubuntu。
代码是 运行 windows。
文档说 here iexact
的 SQL 等价于 ILIKE
。它并没有说 iexact
会在 MySQL 中转换为 ILIKE
。那也是根本不可能的。 MySQL 没有 ILIKE
。 LIKE
已经不区分大小写。
在我使用的 PostgreSQL 中,iexact
转换为:
SELECT ... FROM "article" WHERE UPPER("article"."title"::text) = UPPER(hello world)
MySQL中exact
和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