Re: Different result when using '=' and 'like' in unicode

From: Peter Eisentraut <peter_e(at)gmx(dot)net>
To: Jiang Sheng <jiangsheng(at)sis(dot)sh(dot)cn>
Cc: pgsql-bugs(at)postgresql(dot)org
Subject: Re: Different result when using '=' and 'like' in unicode
Date: 2002-11-17 21:21:09
Message-ID: Pine.LNX.4.44.0211171451440.12428-100000@localhost.localdomain
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

Jiang Sheng writes:

> the sql is
> select * from tbl_test where name = '石田';
>
> but the result contains other data, such as 石町, 柳町, 柳田
>
> and I changed the sql to
> select * from tbl_test where name like '石田';
> select * from tbl_test where name ilike '石田';
>
> the results both correct.

The LIKE operator uses a character-by-character comparison (which could
quite possibly behave oddly if your strings contain combining characters,
but that is a different issue). The = operator uses the host operating
system's locale facilities to do a locale-aware comparison. So in general
LIKE and = are not interchangeable.

If the result you get for = is wrong even under some locale, then you
probably don't have the right locale set on your server. Recent glibc
systems require you to set your locale to xx_YY.utf8 (rather than just
xx_YY) if you want to use Unicode.

--
Peter Eisentraut peter_e(at)gmx(dot)net

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Jiang Sheng 2002-11-18 01:48:27 Re: Different result when using '=' and 'like' in unicode mode
Previous Message Jiang Sheng 2002-11-17 06:18:35 Different result when using '=' and 'like' in unicode mode