简体   繁体   English

尽管正确的数据库整理和使用 icontains,Django 仍返回区分大小写的结果

[英]Django returning case sensitive results despite correct database collation and use of icontains

I have the following DRF view:我有以下 DRF 视图:

class DictionaryFuzzyView(generics.ListAPIView):
    queryset = Dictionary.objects.filter(disabled=False,).order_by(Length('simplified').asc())
    serializer_class = FuzzySerializer
    filter_backends = (filters.DjangoFilterBackend, OrderingFilter)
    pagination_class = LimitOffsetPagination
    ordering_fields = ['id']
    filter_class = FuzzyFilter

FuzzyFilter looks like this: FuzzyFilter 看起来像这样:

class FuzzyFilter(filters.FilterSet):
    simplified = filters.CharFilter(field_name='simplified', lookup_expr='contains')
    traditional = filters.CharFilter(field_name='traditional', lookup_expr='contains')
    pinyin_marks = filters.CharFilter(field_name='pinyin_marks', lookup_expr='contains')
    translation = filters.CharFilter(field_name='translation', lookup_expr='icontains')
    frequency = filters.CharFilter(field_name='frequency', lookup_expr='exact')
    hsk = NumberInFilter(field_name='level', lookup_expr='in')

And I do a call like this:我打电话是这样的:

http://127.0.0.1:8000/api/v1/fuzzy/?translation=One

I'll only get results that contain "One", never results that contain "one", and vice versa.我只会得到包含“一”的结果,永远不会得到包含“一”的结果,反之亦然。

I am using MySQL as my database engine, but as far as I can tell, my collations are correct for case insensitive searching:我使用 MySQL 作为我的数据库引擎,但据我所知,我的排序规则对于不区分大小写的搜索是正确的:

MySQL 数据库表

I am on Django 3.x.我在 Django 3.x 上。

What could possibly be causing it/what's the best method to resolve/troubleshoot this?什么可能导致它/解决/解决此问题的最佳方法是什么?

I had the particular field, translation, set to binary.我将特定字段翻译设置为二进制。

When I unchecked this, it worked as intended.当我取消选中它时,它按预期工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM