Django возвращает результаты с учетом регистра, несмотря на правильную сортировку базы данных и использование значков.

#python #mysql #django #encoding

Вопрос:

У меня есть следующее представление 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
 

Фильтр нечеткости выглядит так:

 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.

Что может быть причиной этого/каков наилучший способ устранения/устранения неполадок?

Комментарии:

1. Запрос ?translation__icontains=One дает вам те же результаты?

2. Нет, это, кажется, находит меня во всех результатах — как будто без какого-либо фильтра вообще

Ответ №1:

У меня было конкретное поле «перевод», настроенное на двоичный код.

Когда я снял этот флажок, все сработало так, как было задумано.