UPPER для русского / регистронезависимый поиск

Изображение Ishayahu

Я зарылся и ничего не понимаю(
Есть БД, создана была в ASCII, но через pg_dumpall я переделывал её и в utf8 и в koi8r:

pg_dumpall -Uuser >> dump
initdb -E UTF8
psql -f dump

Но что бы я ни делал, при попытке сделать регистронезависимый поиск ничего не выходит:

SELECT "todoes_note"."id", "todoes_note"."timestamp","todoes_note"."note", "todoes_note"."author_id"
FROM "todoes_note"
WHERE UPPER("todoes_note"."note"::text) LIKE UPPER ('%Духом%') LIMIT 21;

и

SELECT "todoes_note"."id", "todoes_note"."timestamp","todoes_note"."note", "todoes_note"."author_id"
FROM "todoes_note"
WHERE UPPER("todoes_note"."note"::text) LIKE UPPER ('%духом%') LIMIT 21;

выдают разные результаты(
Что надо сделать? Хотя бы куда смотреть?
Postgresql 9.2.4, FreeBSD 9.0
Собирал из портов с настройками по умолчанию

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

PostgreSQL работает не с

PostgreSQL работает не с собственной, а с системной локалью. Поэтому чтобы всё это работало, просто необходима корректная поддержка UTF-8 в вашей FreeBSD. Если таковой поддержки нет - работать не будет.

то есть всё остальное точно

Изображение Ishayahu

то есть всё остальное точно правильно? А почему с koi8r такая же байда?

У вас вот байда, а у меня на

У вас вот байда, а у меня на Linux'е никакой байды нету.
Поискал по сайту, народ уже спрашивал на эту тему, вот что нашлось:
http://blog.lexa.ru/2008/02/27/freebsd_ru_ruutf8_lc_collate.html
возможно поможет

попробовал, а толку никакого.

Изображение Ishayahu

попробовал, а толку никакого. Переходить на linux советуете? Какой тогда лучше? Нужен только для postgresql под виртуалкой

Не то, что советую

Не то, что советую переходить, просто в FreeBSD бывают какие-то непонятки с локализацией, которых в Linux нет.
Подозреваю, что непонятки для меня, который не очень-то хорошо знает FreeBSD, но тем не менее.
Только что проверил. Хотя и на моей CentOS 6 на работе стоит PostgreSQL 8.4.13, но вот такое работает на ура:

tmp=# select * from filmname;
_id | _filmname | _description | _genrename
-----+-----------------+-------------------+------------
1 | Бегущий человек | Фильм со Шварцем | боевик
2 | Кобра | Фильм со Сталлоне | боевик
(2 строки)

tmp=# select * from filmname where UPPER(_description) like '%ШВАРЦ%';
_id | _filmname | _description | _genrename
-----+-----------------+------------------+------------
1 | Бегущий человек | Фильм со Шварцем | боевик

Советую CentOS 6.последний. Во-первых, это серьёзный серверный дистрибутив, который делается на основе RHEL6. Во-вторых, к нему есть множество сторонних репозиториев. В третьих, у этого дистрибутива долгий многолетний цикл поддержки.

Да, и разумеется, что на версии 8.4.13 никто работать не заставляет. См. сюда:
http://yum.postgresql.org/

И ещё. Нет смысла городить нечего с UPPER или LOWER, когда вместо LIKE можно использовать ILIKE

Это не я, это

Изображение Ishayahu

Это не я, это django)
Спасибо, попробую CentOS

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023