Обсуждение: Flag for insentive use of Postgres?
Hi, is there a flag to set which determines if queries run successful with a case sensitive or case insensitive WHERE clause: For example: if I have a name1 colum with a value 'Test' I would like to search for 'test' and get also this row (select * from tTest where name1='test') Greetings, Andreas
On Wed, Jul 10, 2002 at 02:03:30PM +0200, Andreas Schlegel <schlegel@software.b.uunet.de> wrote a message of 18 lines which said: > is there a flag to set which determines if queries run successful with a > case sensitive or case insensitive WHERE clause: What if the encoding is Unicode, which has no case-folding rules? > For example: if I have a name1 colum with a value 'Test' I would like to > search for 'test' and get also this row > (select * from tTest where name1='test') And name1 = 'MASSE' when you requested name1 = 'Maße'? So, even with Latin-1, you have a problem.
On Wed, 2002-07-10 at 14:31, Stephane Bortzmeyer wrote: > On Wed, Jul 10, 2002 at 02:03:30PM +0200, > Andreas Schlegel <schlegel@software.b.uunet.de> wrote > a message of 18 lines which said: > > > is there a flag to set which determines if queries run successful with a > > case sensitive or case insensitive WHERE clause: > > What if the encoding is Unicode, which has no case-folding rules? Unicode *has* case-folding rules. But they are quite complex (and I'm not an expert - perhaps there's some problem with them?) http://www.unicode.org/unicode/reports/tr21/ cheers -- vbi -- secure email with gpg http://fortytwo.ch/gpg
Вложения
On Wed, Jul 10, 2002 at 02:03:30PM +0200, Andreas Schlegel wrote:
> Hi,
>
> is there a flag to set which determines if queries run successful with a
> case sensitive or case insensitive WHERE clause:
>
> For example: if I have a name1 colum with a value 'Test' I would like to
> search for 'test' and get also this row
> (select * from tTest where name1='test')
If all you want is the values to match without case sensitivity, use
ILIKE. (The rules are different in different locales, and I don't
even know how ILIKE works for non-C locales.)
A
--
----
Andrew Sullivan 87 Mowat Avenue
Liberty RMS Toronto, Ontario Canada
<andrew@libertyrms.info> M6K 3E3
+1 416 646 3304 x110
On Wed, Jul 10, 2002 at 03:44:56PM +0200,
Adrian 'Dagurashibanipal' von Bidder <avbidder@fortytwo.ch> wrote
a message of 39 lines which said:
> Unicode *has* case-folding rules. But they are quite complex (and I'm
> not an expert - perhaps there's some problem with them?)
Many. For instance, upper('é') -> É which is technically correct but
very few Frenchmen will accept that STEPHANE (without the É) is not
the uppercase of Stéphane.
If you want user-friendliness in a application, you cannot rely on
those rules.
On Wed, Jul 10, 2002 at 02:03:30PM +0200, Andreas Schlegel wrote: > For example: if I have a name1 colum with a value 'Test' I would like to > search for 'test' and get also this row > (select * from tTest where name1='test') http://www.ca.postgresql.org/docs/faq-english.html#4.12 Cheers, Neil -- Neil Conway <neilconway@rogers.com> PGP Key ID: DB3C29FC
Stephane Bortzmeyer wrote: > >>For example: if I have a name1 colum with a value 'Test' I would like to >>search for 'test' and get also this row >>(select * from tTest where name1='test') > > > And name1 = 'MASSE' when you requested name1 = 'Maße'? So, even with > Latin-1, you have a problem. > In the meantime I got a message with a quite good solution: ... WHERE lower(name1)='test' The mentioned problem with phrases like 'Maße' is in this application no problem: For every field value the programm creates some matchcodes which contain the original value (Maße) and values with replaced characters( ß -> ss, Ä -> Ae ...). So the user doesn't care if he is looking for 'Maße' or 'Masse'. Greetings, Andreas
On Wed, Jul 10, 2002 at 10:24:15AM -0400,
Andrew Sullivan <andrew@libertyrms.info> wrote
a message of 28 lines which said:
> ILIKE. (The rules are different in different locales, and I don't
> even know how ILIKE works for non-C locales.)
I've not been able to make it work. With all variables set to a French
locale (which works fine with all the programs), PostgreSQL, with
ILIKE or upper(), is still case-sensitive. (upper('stéphane') does not
match STEPHANE nor STÉPHANE.)
It does not bother me, since I'm convinced that the problem is far
too complicated to be solved by simple case-folding rules like those of
US-ASCII.
On Wed, 10 Jul 2002, Stephane Bortzmeyer wrote:
> On Wed, Jul 10, 2002 at 10:24:15AM -0400,
> Andrew Sullivan <andrew@libertyrms.info> wrote
> a message of 28 lines which said:
>
> > ILIKE. (The rules are different in different locales, and I don't
> > even know how ILIKE works for non-C locales.)
>
> I've not been able to make it work. With all variables set to a French
> locale (which works fine with all the programs), PostgreSQL, with
> ILIKE or upper(), is still case-sensitive. (upper('stИphane') does not
> match STEPHANE nor STиPHANE.)
it should works ! Check if you define locale environment *just before*
starting postmaster. I've been asked many times why locale doesnt' works
here in Russia and every time there were problem with locale or startup
scripts.
>
> It does not bother me, since I'm convinced that the problem is far
> too complicated to be solved by simple case-folding rules like those of
> US-ASCII.
>
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster
>
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
In the postgresql manual you find some stuff like ILIKE here: http://www.postgresql.org/idocs/index.php?functions-matching.html Andreas Schlegel wrote: > Hi, > > is there a flag to set which determines if queries run successful with a > case sensitive or case insensitive WHERE clause: > > For example: if I have a name1 colum with a value 'Test' I would like to > search for 'test' and get also this row > (select * from tTest where name1='test') > > Greetings, > Andreas > > > > ---------------------------(end of broadcast)--------------------------- > TIP 6: Have you searched our list archives? > > http://archives.postgresql.org
On Wed, Jul 10, 2002 at 07:13:40PM +0300, Oleg Bartunov <oleg@sai.msu.su> wrote a message of 38 lines which said: > it should works ! Check if you define locale environment *just before* > starting postmaster. You mean it cannot be done on a per-user basis? What if I have a Unicode database and users from all Europe, using different locales?