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