Django区分大小写的搜索

pinq-

我有问题。我有这样的模型:

class Teams(models.Model):
    Name = models.CharField(max_length=200)
    Short_name = models.CharField(max_length=200, default = "-")

当我通过短名称搜索团队时,例如“ Har”:

models.Teams.objects.filter(SHort_name = "Har")

我得到“ HAR”和“ Har”的结果。即使我这样尝试:

 models.Teams.objects.filter(SHort_name__exact = "Har"):

我得到相同的结果(“ HAR”和“ Har”)Short_name列采用utf8mb4_general_ci格式,因此应该可以,并且数据库连接具有以下选项:

'OPTIONS': {'charset': 'utf8mb4', 'use_unicode': True},

我不知道什么地方出了问题或如何获得确切的结果。

马特·S

根据您的问题,我假设您正在使用MySQL。当不使用二进制排序规则时,MySQL执行不区分大小写的字符串比较。

https://dev.mysql.com/doc/refman/8.0/zh-CN/case-sensitiveivity.html

您的问题是在数据库级别,并且Django无法在不转换每个查询的排序规则的情况下解决该问题。utf8_bin(或另一个* _bin)中更改排序规则,您将被设置为:

默认情况下,对于UTF-8数据库,MySQL将使用utf8_general_ci归类。这导致所有字符串相等性比较均以不区分大小写的方式进行。也就是说,在数据库级别上,“ Fred”和“ freD”被认为是相等的...如果要在特定列或表上进行区分大小写的比较,请更改该列或表以使用utf8_bin归类。

https://docs.djangoproject.com/zh-CN/2.2/ref/databases/#collat​​ion-settings

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章