Thread: 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 с русскими не работает?
From
"Viktor Vislobokov"
Date:
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 с русскими не работает?
From
"Viktor Vislobokov"
Date:
> Ты бы подробнее проблему описал ! Значит, что я понял: > 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--
Re: [pgsql-ru-general] Re: [pgsql-ru-general] Re: [pgsql-ru-general] Re: [pgsql-ru-general] ILIKE с русскими не работает?
From
"Viktor Vislobokov"
Date:
>> 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
Re: [pgsql-ru-general] Re: [pgsql-ru-general] Re: [pgsql-ru-general] Re: [pgsql-ru-general] ILIKE с русскими не работает?
From
"Viktor Vislobokov"
Date:
>> >>> 2. как ты делали initdb ? >> >> >> initdb делается автоматом при первом запуске службы PostgreSQL. >> Делается, насколько я понимаю в системной локали, но для PostgreSQL >> как ASCII (судя по выводу \l в psql). > > > сделай в ru_RU.UTF8 > Сделал. Ничего не изменилось. ILIKE в UTF-8 не работает. -- С уважением, Виктор
Re: [pgsql-ru-general] Re: [pgsql-ru-general] Re: [pgsql-ru-general] Re: [pgsql-ru-general] Re: [pgsql-ru-general] ILIKE с русскими не работает?
From
Nick Gazaloff
Date:
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)
Re: [pgsql-ru-general] Re: [pgsql-ru-general] Re: [pgsql-ru-general] Re: [pgsql-ru-general] Re: [pgsql-ru-general] Re: [pgsql-ru-general] ILIKE с русскими не работает?
From
"Viktor Vislobokov"
Date:
>>>> 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=# -- С уважением, Виктор