Обсуждение: ILIKE с русскими не работает?
Собственно 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=#
Есть проблема или я что-то не так делаю?
--
С уважением, Виктор
			
		>>>>> 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
			
		> А собственно переключиться в новую базу? > > Да, забыл здесь привести. Переключался, конечно. Пробовал даже создавать базу в KOI8-R, а не только в UTF-8. -- С уважением, Виктор
>>>>> 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
			
		Ясно. Т.е. у тебя системная локаль 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 не могу, > боюсь пользователи меня не поймут. :) > > > -- С уважением, Виктор
  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--
			
		Re: [pgsql-ru-general] Re: [pgsql-ru-general] ILIKE с русскими не работает?
От
 
		    	"Viktor Vislobokov"
		    Дата:
		        Oleg Bartunov wrote: > Это у тебя с локаое проблема, проверь. В koi8-r все работает как > положено. > Это получается, что не у меня с локалью проблема, а у PostgreSQL. Да, у меня системная локаль UTF-8. Но почему бы нет? Тем более, что количество дистрибутивов Linux, которые используют ru_RU.koi8r вместо ru_RU.UTF-8 уже стремится к нулю. В общем бага, однозначно. Будем знать. -- С уважением, Виктор
  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--
			
		Re: [pgsql-ru-general] Re: [pgsql-ru-general] Re: [pgsql-ru-general] ILIKE с русскими не работает?
От
 
		    	"Viktor Vislobokov"
		    Дата:
		        > Ты бы подробнее проблему описал ! Значит, что я понял: > 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'; -- С уважением, Виктор
>>>>> 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
			
		  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. На остальные базы это влияет только, если при создании базы явно не указана кодировка. Я не прав? -- С уважением, Виктор
>>>>> 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=# -- С уважением, Виктор