首页 > 解决方案 > 尽管正确的数据库排序和使用了图标,Django 返回区分大小写的结果

问题描述

我有以下 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 看起来像这样:

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')

我做了这样的电话:

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

我只会得到包含“一”的结果,绝不会得到包含“一”的结果,反之亦然。

我使用 MySQL 作为我的数据库引擎,但据我所知,我的排序规则对于不区分大小写的搜索是正确的:

MySQL 数据库表

我在 Django 3.x 上。

什么可能导致它/解决/排除故障的最佳方法是什么?

标签: pythonmysqldjangoencoding

解决方案


我将特定字段翻译设置为二进制。

当我取消选中它时,它按预期工作。


推荐阅读