Django ORM с PostgreSQL возвращает неправильные данные с помощью значков

#django #database #postgresql #ubuntu

Вопрос:

Моя модель такая.

 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)
 

I have 2 records with the same supplierName=’Смирнова Ольга Александровна’.

 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
 

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

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

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

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

1. Скорее всего, вы установили неправильные параметры сортировки для своей базы данных.

2. @WillemVanOnsem Спасибо тебе! Проблема заключалась в настройках сортировки.

Ответ №1:

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

Я удаляю и снова создаю кластер 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