3.2 KiB
3.2 KiB
PostgreSQL 16.11: поиск в Mail и локаль БД
Краткая справка по влиянию локали и настройкам PostgreSQL 16.x на поиск писем в приложении Mail.
Роль локали (не параметр lang)
langв F7cloud — язык интерфейса; на работу поиска в БД не влияет.- На поиск по тексту (отправитель, получатель, тема) влияет локаль базы PostgreSQL:
datcollate/datctype(или на уровне кластера:lc_collate,lc_ctype).
- Проверка текущей локали и кодировки (только чтение):
SELECT datname, datcollate, datctype, pg_encoding_to_char(encoding) AS encoding FROM pg_database WHERE datname = current_database();
Поведение при локали C / POSIX (типично для «по умолчанию»)
| Что проверяли | Результат |
|---|---|
LOWER('Дмитрий') |
Строка не меняется (кириллица не приводится к нижнему регистру). |
'Дмитрий Мельник' ILIKE '%дми%' |
false (регистр для кириллицы не игнорируется). |
'Дмитрий Мельник' LIKE '%Дми%' |
true. |
Поэтому в Mail для поиска по отправителю/получателю/теме при «голом» запросе (например, «Дми») в запрос подставляются оба варианта: как введено и в нижнем регистре — поиск не зависит от локали БД.
Рекомендации для PostgreSQL 16.11
-
Оставить как есть
С текущей реализацией Mail поиск по кириллице работает и приdatctype = C. -
Если нужна «нативная» поддержка регистронезависимого поиска в БД
Создавать базу с локалью, поддерживающей нужный язык, например:ru_RU.UTF-8— для кириллицы;en_US.UTF-8— для латиницы.
Локаль задаётся при создании кластера (initdb -D ... --locale=ru_RU.UTF-8) или при создании БД (CREATE DATABASE ... LC_COLLATE='ru_RU.UTF-8' LC_CTYPE='ru_RU.UTF-8'). Сменить локаль у уже существующей БД без дампа/восстановления нельзя.
-
Кодировка
Для Mail важно использовать UTF-8 (encoding = UTF8). В PostgreSQL 16.11 по умолчанию так и есть при создании БД из шаблона с UTF-8.