Django ORM с PostgreSQL возвращает неверные данные при использовании icontains

Моя модель.

class Seller(models.Model):
    supplierId = models.IntegerField('Supplier ID', primary_key=True)
    supplierName = models.CharField('Поставщик', max_length=255, null=True, blank=True)
    inn = models.CharField('ИНН', max_length=255, null=True, blank=True)
    ogrn = models.CharField('ОГРН', max_length=255, null=True, blank=True)
    legalAddress = models.CharField('Юридический адрес', max_length=512, null=True, blank=True)

У меня есть 2 записи с одинаковым именем поставщикаName='Смирнова Ольга Александровна'.

sellers = Seller.objects.filter(supplierName__icontains='Смирнова Ольга Александровна')
print(sellers.count()) # return 1
sellers = Seller.objects.filter(supplierName__contains='Смирнова Ольга Александровна')
print(sellers.count()) # return 2
sellers = Seller.objects.filter(supplierName='Смирнова Ольга Александровна')
print(sellers.count()) # return 2

Я также пытаюсь использовать supplierName__search, но он тоже возвращает не нормальные данные.
иконки возвращают неправильные данные не только в этом примере.

Я попытался создать ту же базу данных postgresql на моем локальном компьютере windows с той же моделью и записями в ней. И она работает правильно. База данных с проблемой работает на ubuntu 20.04

Что я могу с этим сделать? Мне это нужно для правильного поиска на моем сайте.

Проблема была в настройках коллизии

Удаляю и создаю заново кластер postgresql с новой кодировкой. Без создания кластера он не увидел русскую кодировку.

dpkg-reconfigure locales 
# install your locales
pg_dropcluster --stop 14 main 
# It will delete your cluster with all data, so backup it before
pg_createcluster --locale ru_RU.UTF-8 --start 14 main
# 14 - your postgres veriosn, main - your cluster name (main by default)

Также вы можете изменить db_collation для поля в django, если локаль представлена в psql \l

Вернуться на верх