我有问题。我有这样的模型:
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},
我不知道什么地方出了问题或如何获得确切的结果。
根据您的问题,我假设您正在使用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/#collation-settings
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句