Название: ilike: Posgresql 7.4 + qt4.4.2 Отправлено: andrew.k от Июнь 25, 2010, 12:03 Есть такой запрос: select count(*) from abonents where name ilike='%аб%';
в таблице есть два абонента Абонент1 и Абонент2. Грабли: через терминал psql запрос выполняется как я и ожидал. Возвращает 2. В программе выполняю запрос через QSqlQuery. получат 0. ilike срабатывает как like (регистрозависимый) Почему? Название: Re: ilike: Posgresql 7.4 + qt4.4.2 Отправлено: Kolobok от Июнь 25, 2010, 13:05 Русские буквы в коде это плохо. Кроме того, регистрозависимость и нелатинские символы в базах часто не дружат. Не знаю, как в этой.
Название: Re: ilike: Posgresql 7.4 + qt4.4.2 Отправлено: andrew.k от Июнь 25, 2010, 13:32 Русские буквы в коде это плохо. Кроме того, регистрозависимость и нелатинские символы в базах часто не дружат. Не знаю, как в этой. Русские буквы в коде чисто для примера. В любом случа значение берется с формы и там по любому будет использоваться русский набор.Заметил еще одну вещь. не работают встроенные функции, например: запрос "select lower(name) from abonents" возвращает name в неизменном виде, если работать через QSqlQuery. Кто подскажет в чем проблема? А пока пошел читат асситента. Название: Re: ilike: Posgresql 7.4 + qt4.4.2 Отправлено: andrew.k от Июнь 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("Абонент") возвращает "АБОНЕНт". Зато по крайней мере похоже, что я двигаюсь в правильном направлении. Кто понимает, что такое локаль и коллэйт помогите! :) Что-то не могу найти ничего в инете освещающего данные термины ) Название: Re: ilike: Posgresql 7.4 + qt4.4.2 Отправлено: andrew.k от Июнь 25, 2010, 15:39 проблема решилась.
РЕШЕНИЕ: LANG=ru_RU.KOI8-R это привело к нужному результату. Тема закрыта, за исключением ссылок на тему локалей/коллейтов, чтобы лучше понимать что это и как с этим работать. Вот и поговорили ;D Название: Re: ilike: Posgresql 7.4 + qt4.4.2 Отправлено: Пантер от Июнь 25, 2010, 16:35 Используй UTF-8, чтобы проблем не было.
|