On 10/9/2019 12:34 AM, Laurenz Albe wrote:
Igal Sapir wrote:
I am trying to test a simple case insensitive comparison. Most likely the
collation that I chose is wrong, but I'm not sure how to choose the correct
one (for English/US?). Here is my snippet:
create collation case_insensitive(
provider=icu, locale='en-US-x-icu', deterministic=false
);
select 'Abc' = 'abc' collate case_insensitive;
I expected true but am getting false.
Any thoughts?
Yes, the LOCALE is wrong. Use
create collation case_insensitive (
provider=icu, locale='en-US-u-ks-level2', deterministic=false
);
The name of the locale defines it.
My blog post can give a simple introduction:
https://www.cybertec-postgresql.com/en/icu-collations-against-glibc-2-28-data-corruption/
Thank you all for replying. I tried to use the locale suggested by both
Laurenz and Pavel, en-US-u-ks-level2, but I'm still getting false for a
simple comparison of 'Abc' = 'abc'. I tried the locale both as a
'string' and as an "identifier":
> select version();
version |
-------------------------------------------------------------------------------------------------------|
PostgreSQL 12.0 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5
20150623 (Red Hat 4.8.5-39), 64-bit|
> drop collation if exists case_insensitive;
> create collation case_insensitive (
provider=icu, locale="en-US-u-ks-level2", deterministic=false
);
> select 'Abc' = 'abc' collate case_insensitive as is_equal;
is_equal|
--------|
false |
What am I doing wrong here?
Thanks,
Igal