Russian Qt Forum
Ноябрь 24, 2024, 09:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: ilike: Posgresql 7.4 + qt4.4.2  (Прочитано 4115 раз)
andrew.k
Гость
« : Июнь 25, 2010, 12:03 »

Есть такой запрос: select count(*) from abonents where name ilike='%аб%';
в таблице есть два абонента Абонент1 и Абонент2.
Грабли: через терминал psql запрос выполняется как я и ожидал. Возвращает 2.
В программе выполняю запрос через QSqlQuery.
получат 0.
ilike срабатывает как like (регистрозависимый)
Почему?
Записан
Kolobok
Гость
« Ответ #1 : Июнь 25, 2010, 13:05 »

Русские буквы в коде это плохо. Кроме того, регистрозависимость и нелатинские символы в базах часто не дружат. Не знаю, как в этой.
Записан
andrew.k
Гость
« Ответ #2 : Июнь 25, 2010, 13:32 »

Русские буквы в коде это плохо. Кроме того, регистрозависимость и нелатинские символы в базах часто не дружат. Не знаю, как в этой.
Русские буквы в коде чисто для примера. В любом случа значение берется с формы и там по любому будет использоваться русский набор.
Заметил еще одну вещь. не работают встроенные функции, например:
запрос "select lower(name) from abonents" возвращает name в неизменном виде, если работать через QSqlQuery.
Кто подскажет в чем проблема? А пока пошел читат асситента.
Записан
andrew.k
Гость
« Ответ #3 : Июнь 25, 2010, 15:30 »

Подозреваю, что проблема кроется где-то в collate-ах. Улыбающийся
Смутно представляю себе что это такое, сейчас мне это представляется неким набором правил сортировки с функций работы с регистром символов. Вот видимо для пользователя postgres этот коллэйт отличается от установленного для БД.
Домашний каталог для postrgres установлен в /var/lib/pgsql
там есть файл .i18n . Подозреваю, что правильно исправив этот файл, получу нужный результат.
в нем заданы три параметра:
PG_DEFAULT_DB_ENCODING=KOI8
PG_SERVER_LOCALE=ru_RU.KOI8-R

и отдельно ниже:
# Настройка языкового окружения пользователя postgres
LANG=POSIX

Исправил POSIX на ru_RU
привело к тому что функция lower("Абонент") возвращает "АБОНЕНт".
Зато по крайней мере похоже, что я двигаюсь в правильном направлении.
Кто понимает, что такое локаль и коллэйт помогите! Улыбающийся
Что-то не могу найти ничего в инете освещающего данные термины )
« Последнее редактирование: Июнь 25, 2010, 15:33 от andrew.k » Записан
andrew.k
Гость
« Ответ #4 : Июнь 25, 2010, 15:39 »

проблема решилась.
РЕШЕНИЕ: LANG=ru_RU.KOI8-R
это привело к нужному результату.
Тема закрыта, за исключением ссылок на тему локалей/коллейтов, чтобы лучше понимать что это и как с этим работать.

Вот и поговорили  Смеющийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Июнь 25, 2010, 16:35 »

Используй UTF-8, чтобы проблем не было.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 22.