PostgreSQL. Проблема поиска в БД из-за кодировки сервера?
На рабочем сервере возникла проблема поиска в таблице БД PostgreSQL, в то время как на отладочном сервере все отлично ищется. Дамп БД с отладочного серевера перенесён на рабочий. Идентичность бэк-кода поиска проверена.
Кодировки на отладочном сервере:
mybase=# SHOW SERVER_ENCODING;
server_encoding
-----------------
UTF8
(1 строка)
mybase=# select datname, pg_encoding_to_char(encoding) from pg_database;
datname | pg_encoding_to_char
-----------+---------------------
postgres | UTF8
template1 | UTF8
template0 | UTF8
mybase | UTF8
(4 строки)
Кодировки на рабочем сервере:
mybase=# SHOW SERVER_ENCODING;
server_encoding
-----------------
UTF8
(1 row)
mybase=# select datname, pg_encoding_to_char(encoding) from pg_database;
datname | pg_encoding_to_char
-----------+---------------------
postgres | LATIN1
template1 | LATIN1
template0 | LATIN1
mybase | UTF8
(4 rows)
Как видим, кодировка на обоих серверах идентичная и кодировка пользовательской БД "mybase" - UTF8, но кодировка системных таблиц разная. Может ли это как то повлиять на поиск, когда в случае поиска на сервере разработки есть выдача результатов, а на рабочем сервере найти не может по такой же ключевой фразе. Код поиска и дампы БД идентичны.
Функционал поиска:
if request.method == 'POST': # post-запрос после form.submit()
context = search(request) # обработка поискового запроса
# ...
def search(request):
""" Поиск по услугам. """
# итоговый набор групп услуг по всем поисковым словам
collections_all = Collection.objects.none()
category = ''
searchForm = SearchForm(request.POST)
if searchForm.is_valid:
search_obj = searchForm.save()
# поиск по каждому слову из фразы запроса
words = search_obj.text.split() # разбиение поиска на слова
for word in words:
# исключая однобуквенные слова - предлоги, союзы, местоимения и др.
if len(word) > 2:
# услуги, содержащие ключевое слово
services = Price.objects.filter(name__icontains=word).values_list('collection', flat=True) # набор услуг со словом
# группы услуг, содержащие найденные услуги
collections = Collection.objects.filter(id__in=services)
# накопление групп услуг по каждому слову
collections_all |= collections # объединить без дубликатов
category = 'По запросу "<span class="teal">' + search_obj.text + '</span>" ' + (
'найдены следующие группы медицинских услуг:' if collections_all else 'услуги не найдены!')
context = {'category': category, 'searchResult_fl': collections_all.exists(), 'collections': collections_all}
return context
В чём может быть причина такого поведения?