Thread: ILIKE с русскими не работает?

ILIKE с русскими не работает?

From
"Viktor Vislobokov"
Date:
Собственно subj?

Проверяю:
template1=# CREATE DATABASE tmp WITH ENCODING='utf8';
CREATE DATABASE
template1=# CREATE TABLE tmp_tbl (id int not null primary key, name
varchar(20));
NOTICE:  CREATE TABLE / PRIMARY KEY создаст подразумеваемый индекс
"tmp_tbl_pkey" для таблицы "tmp_tbl"
CREATE TABLE
template1=# INSERT INTO tmp_tbl VALUES(1, 'Вагон');
INSERT 17182 1
template1=# SELECT * FROM tmp_tbl WHERE name ILIKE ('Ва%');
 id |    name
----+------------
  1 | Вагон
(1 запись)

template1=# select * from tmp_tbl where name ILIKE ('ва%');
 id | name
----+------
(записей: 0)

template1=#

Есть проблема или я что-то не так делаю?

--
С уважением, Виктор



Re: ILIKE с русскими не раб

From
Sergey Suleymanov
Date:
>>>>> Viktor Vislobokov writes:

 Viktor> Собственно subj?  Проверяю: template1=# CREATE DATABASE tmp

         А собственно переключиться в новую базу?

 Viktor> WITH ENCODING='utf8'; CREATE DATABASE template1=# CREATE
 Viktor> TABLE tmp_tbl (id int not null primary key, name
 Viktor> varchar(20)); NOTICE: CREATE TABLE / PRIMARY KEY создаст
 Viktor> подразумеваемый индекс "tmp_tbl_pkey" для таблицы "tmp_tbl"
 Viktor> CREATE TABLE template1=# INSERT INTO tmp_tbl VALUES(1,
 Viktor> 'Вагон'); INSERT 17182 1 template1=# SELECT * FROM tmp_tbl
 Viktor> WHERE name ILIKE ('Ва%'); id | name ----+------------ 1 |
 Viktor> Вагон (1 запись)

 Viktor> template1=# select * from tmp_tbl where name ILIKE ('ва%');
 Viktor> id | name ----+------ (записей: 0)

 Viktor> template1=#

 Viktor> Есть проблема или я что-то не так делаю?

 Viktor> -- С уважением, Виктор

--
  Sergey Suleymanov


Re: ILIKE с русски

From
"Viktor Vislobokov"
Date:
>         А собственно переключиться в новую базу?
>
>
Да, забыл здесь привести. Переключался, конечно.
Пробовал даже создавать базу в KOI8-R, а не только в UTF-8.

--
С уважением, Виктор




Re: ILIKE с русски

From
Sergey Suleymanov
Date:
>>>>> Viktor Vislobokov writes:

 Viktor> Да, забыл здесь привести. Переключался, конечно.  Пробовал
 Viktor> даже создавать базу в KOI8-R, а не только в UTF-8.

         Есть подозрение, что тут играет роль значение LC_COLLATE
         самого процесса. Что говорит pg_controldata?

         У меня база создана в KOI8, и

postgres@dragon:~$ pg_controldata
...
LC_COLLATE:                           ru_RU.KOI8-R
LC_CTYPE:                             ru_RU.KOI8-R

         всякие ilike, ~*, order by работают замечательно. С индексами
         правда облом.

         А вот попробовал создать в UNICODE, таки да - не
         работают. Правда проверить с LC_COLLATE=ru_RU.UTF-8 не могу,
         боюсь пользователи меня не поймут. :)

--
  Sergey Suleymanov


Re: ILIKE с русски

From
"Viktor Vislobokov"
Date:
Ясно. Т.е. у тебя системная локаль koi8-r
У меня - utf-8
Т.е. надо чтобы системная локаль была koi8-r, чтобы нормально работал ilike?
Интересно, а как это работает в винде?

Народы, у кого postgreSQL на винде? Что скажите?

> Viktor> даже создавать базу в KOI8-R, а не только в UTF-8.
>
>         Есть подозрение, что тут играет роль значение LC_COLLATE
>         самого процесса. Что говорит pg_controldata?
>
>         У меня база создана в KOI8, и
>
>postgres@dragon:~$ pg_controldata
>...
>LC_COLLATE:                           ru_RU.KOI8-R
>LC_CTYPE:                             ru_RU.KOI8-R
>
>         всякие ilike, ~*, order by работают замечательно. С индексами
>         правда облом.
>
>         А вот попробовал создать в UNICODE, таки да - не
>         работают. Правда проверить с LC_COLLATE=ru_RU.UTF-8 не могу,
>         боюсь пользователи меня не поймут. :)
>
>
>


--
С уважением, Виктор



Re: [pgsql-ru-general] ILIKE с русскими не работает?

From
Oleg Bartunov
Date:
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

---559023410-869693583-1114412345=:4489
Content-Type: TEXT/PLAIN; charset=koi8-r; format=flowed
Content-Transfer-Encoding: 8BIT

Это  у тебя с локаое проблема, проверь.  В koi8-r все работает как положено.

On Mon, 25 Apr 2005, Viktor Vislobokov wrote:

> Собственно subj?
>
> Проверяю:
> template1=# CREATE DATABASE tmp WITH ENCODING='utf8';
> CREATE DATABASE
> template1=# CREATE TABLE tmp_tbl (id int not null primary key, name
> varchar(20));
> NOTICE:  CREATE TABLE / PRIMARY KEY создаст подразумеваемый индекс
> "tmp_tbl_pkey" для таблицы "tmp_tbl"
> CREATE TABLE
> template1=# INSERT INTO tmp_tbl VALUES(1, 'Вагон');
> INSERT 17182 1
> template1=# SELECT * FROM tmp_tbl WHERE name ILIKE ('Ва%');
> id |    name
> ----+------------
> 1 | Вагон
> (1 запись)
>
> template1=# select * from tmp_tbl where name ILIKE ('ва%');
> id | name
> ----+------
> (записей: 0)
>
> template1=#
>
> Есть проблема или я что-то не так делаю?
>
>

     Regards,
         Oleg
_____________________________________________________________
Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
Sternberg Astronomical Institute, Moscow University (Russia)
Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
phone: +007(095)939-16-83, +007(095)939-23-83
---559023410-869693583-1114412345=:4489--

Oleg Bartunov wrote:

> Это  у тебя с локаое проблема, проверь.  В koi8-r все работает как
> положено.
>
Это получается, что не у меня с локалью проблема, а у PostgreSQL.
Да, у меня системная локаль UTF-8. Но почему бы нет? Тем более, что
количество
дистрибутивов Linux, которые используют ru_RU.koi8r вместо ru_RU.UTF-8
уже стремится к нулю. В общем бага, однозначно. Будем знать.

--
С уважением, Виктор



Re: Re: [pgsql-ru-general] Re: [pgsql-ru-

From
Oleg Bartunov
Date:
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

---559023410-1817792895-1114414001=:4489
Content-Type: TEXT/PLAIN; charset=koi8-r; format=flowed
Content-Transfer-Encoding: 8BIT

On Mon, 25 Apr 2005, Viktor Vislobokov wrote:

> Oleg Bartunov wrote:
>
>> Это  у тебя с локаое проблема, проверь.  В koi8-r все работает как
>> положено.
>>
> Это получается, что не у меня с локалью проблема, а у PostgreSQL.
> Да, у меня системная локаль UTF-8. Но почему бы нет? Тем более, что
> количество
> дистрибутивов Linux, которые используют ru_RU.koi8r вместо ru_RU.UTF-8
> уже стремится к нулю. В общем бага, однозначно. Будем знать.

Ты бы подробнее проблему описал ! Значит, что я понял:
1. системная локаль у тебя ru_RU.UTF-8 и она у тебя везде кроме потсгреса
    работает нормально. Проверь в perl, например.
2. как ты делали initdb ?
3. как ты вводил запрос ? Я, например, не знаю, как мне в psql работать
    в unicode :)

После этого, я смогу проверить у себя.

>
>

     Regards,
         Oleg
_____________________________________________________________
Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
Sternberg Astronomical Institute, Moscow University (Russia)
Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
phone: +007(095)939-16-83, +007(095)939-23-83
---559023410-1817792895-1114414001=:4489--

> Ты бы подробнее проблему описал ! Значит, что я понял:
> 1. системная локаль у тебя ru_RU.UTF-8 и она у тебя везде кроме потсгреса
>    работает нормально. Проверь в perl, например.

Работает, например
#!/usr/bin/perl

use utf8;

$s = "Проба";

print uc($s) . "\n";
print lc($s) . "\n";


> 2. как ты делали initdb ?

initdb делается автоматом при первом запуске службы PostgreSQL.
Делается, насколько я понимаю в системной локали, но для PostgreSQL
как ASCII (судя по выводу \l в psql).

> 3. как ты вводил запрос ? Я, например, не знаю, как мне в psql работать
>    в unicode :)

Вводил в psql. Да ничем не отличается работа в UTF-8 локали для пользователя
от любой другой локали. Только вот такими заморочками как с ILIKE.
Базу ессно, создаём с WITH ENCODING 'UTF8';

--
С уважением, Виктор



Re: Re: [pgsql-ru-general] Re:

From
Sergey Suleymanov
Date:
>>>>> Viktor Vislobokov writes:

 Viktor> Это получается, что не у меня с локалью проблема, а у
 Viktor> PostgreSQL.  Да, у меня системная локаль UTF-8. Но почему бы
 Viktor> нет? Тем более, что количество дистрибутивов Linux, которые
 Viktor> используют ru_RU.koi8r вместо ru_RU.UTF-8 уже стремится к
 Viktor> нулю. В общем бага, однозначно. Будем знать.

         Кстати да. Вот что нашел:

> the caseinsensitive patternmatch-operators seems not to work with
> multibyte, while lower() and upper()-functions finally works perfect.

It looks to me like iwchareq() in src/backend/utils/adt/like.c still needs
work to handle multibyte characters in a sane fashion.  Feel free to
submit a patch ...

            regards, tom lane

      Речь шла правда об 8.0b3. Но похоже, ибо order by, upper, lower
      работают, а ilike и ~* - нет.

--
  Sergey Suleymanov


Re: Re: [pgsql-ru-general] Re: [pgsql-ru-

From
Oleg Bartunov
Date:
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

---559023410-1691952160-1114430434=:4489
Content-Type: TEXT/PLAIN; charset=koi8-r; format=flowed
Content-Transfer-Encoding: 8BIT

On Mon, 25 Apr 2005, Viktor Vislobokov wrote:

>
>> Ты бы подробнее проблему описал ! Значит, что я понял:
>> 1. системная локаль у тебя ru_RU.UTF-8 и она у тебя везде кроме потсгреса
>>    работает нормально. Проверь в perl, например.
>
> Работает, например
> #!/usr/bin/perl
>
> use utf8;
>
> $s = "Проба";
>
> print uc($s) . "\n";
> print lc($s) . "\n";
>
>
>> 2. как ты делали initdb ?
>
> initdb делается автоматом при первом запуске службы PostgreSQL.
> Делается, насколько я понимаю в системной локали, но для PostgreSQL
> как ASCII (судя по выводу \l в psql).

сделай в ru_RU.UTF8

>
>> 3. как ты вводил запрос ? Я, например, не знаю, как мне в psql работать
>>    в unicode :)
>
> Вводил в psql. Да ничем не отличается работа в UTF-8 локали для пользователя
> от любой другой локали. Только вот такими заморочками как с ILIKE.
> Базу ессно, создаём с WITH ENCODING 'UTF8';
>
>

     Regards,
         Oleg
_____________________________________________________________
Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
Sternberg Astronomical Institute, Moscow University (Russia)
Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
phone: +007(095)939-16-83, +007(095)939-23-83
---559023410-1691952160-1114430434=:4489--

>> initdb делается автоматом при первом запуске службы PostgreSQL.
>> Делается, насколько я понимаю в системной локали, но для PostgreSQL
>> как ASCII (судя по выводу \l в psql).
>
>
> сделай в ru_RU.UTF8

Хм.  А в чём разница будет?
Я ведь саму базу создаю с явным указанием кодировки KOI8?
Т.е. я всегда считал, что если указать кодировку при initdb, то эта
кодировка влияет
только на базу template1. На остальные базы это влияет только, если при
создании
базы явно не указана кодировка. Я не прав?

--
С уважением, Виктор



Re: Re: [pgsql-ru-general] Re:

From
Sergey Suleymanov
Date:
>>>>> Viktor Vislobokov writes:

 Viktor> Хм.  А в чём разница будет?  Я ведь саму базу создаю с явным
 Viktor> указанием кодировки KOI8?  Т.е. я всегда считал, что если
 Viktor> указать кодировку при initdb, то эта кодировка влияет только
 Viktor> на базу template1. На остальные базы это влияет только, если
 Viktor> при создании базы явно не указана кодировка. Я не прав?

         Полагаю нет. Кодировка базы влияет только на трансляцию
         ввода/вывода. А сортировка и прочая от локали initdb. Оно и
         смотрится по разному: SHOW LC_COLLATE/LC_* или SHOW
         SERVER_ENCODING/CLIENT_ENCODING

--
  Sergey Suleymanov


>>
>>> 2. как ты делали initdb ?
>>
>>
>> initdb делается автоматом при первом запуске службы PostgreSQL.
>> Делается, насколько я понимаю в системной локали, но для PostgreSQL
>> как ASCII (судя по выводу \l в psql).
>
>
> сделай в ru_RU.UTF8
>
Сделал. Ничего не изменилось. ILIKE в UTF-8 не работает.



--
С уважением, Виктор



Viktor Vislobokov wrote:
>
>>>
>>>> 2. как ты делали initdb ?
>>>
>>>
>>>
>>> initdb делается автоматом при первом запуске службы PostgreSQL.
>>> Делается, насколько я понимаю в системной локали, но для PostgreSQL
>>> как ASCII (судя по выводу \l в psql).
>>
>>
>>
>> сделай в ru_RU.UTF8
>>
> Сделал. Ничего не изменилось. ILIKE в UTF-8 не работает.

Покажи вывод
show LC_COLLATE;
show LC_CTYPE;


--

С уважением,
технический директор ООО "ЦСА"
Николай Газалов
www.sbin.org
+7 8793 365584
(GPG Key ID: 4396B2D0)

>>>> initdb делается автоматом при первом запуске службы PostgreSQL.
>>>> Делается, насколько я понимаю в системной локали, но для PostgreSQL
>>>> как ASCII (судя по выводу \l в psql).
>>>
>>>
>>>
>>>
>>> сделай в ru_RU.UTF8
>>>
>> Сделал. Ничего не изменилось. ILIKE в UTF-8 не работает.
>
>
> Покажи вывод
> show LC_COLLATE;
> show LC_CTYPE;
>
>
tmp=# SHOW LC_COLLATE;
 lc_collate
-------------
 ru_RU.UTF-8
(1 запись)

tmp=# SHOW LC_CTYPE;
  lc_ctype
-------------
 ru_RU.UTF-8
(1 запись)

tmp=#

--
С уважением, Виктор