Postgresql create database statement için şuan ICU (International Components for Unicode – Unicode için Uluslararası Bileşenler) desteklemiyor.
bir collation ya deterministiktir yada değildir varsayılan olarak deterministik bir şekilde gelir
Türkçe case insensitive (büyük küçük harf duyarsız) bir collation oluşturalım
CREATE COLLATION ci_turkish (provider = icu, locale = 'tr-TR-u-ks-level2', deterministic = false);
daha sonra bir tablo oluşturup name alanının collate değerine yeni oluşturduğumuz “ci_turkish” değerini verelim
create table testtable1 ( id serial primary key, name text COLLATE "ci_turkish" );
insert into testtable1 (name) values('ibo'); insert into testtable1 (name) values('İBO'); insert into testtable1 (name) values('İBo'); insert into testtable1 (name) values('aLi'); insert into testtable1 (name) values('ALİ'); insert into testtable1 (name) values('ali');
select * from testtable1 where name = 'ibo'; select * from testtable1 where name = 'iBo';
ibo da yazsak iBo da yazsak 3 kaydın 3’üde gelecektir fakat
select * from testtable1 where name like '%i%';
dediğimizde
ERROR: nondeterministic collations are not supported for LIKE
hatası alacağız sadece like kullanımı için değil regular expression kullanmak istediğimizde yine
ERROR: nondeterministic collations are not supported for regular expressions hatasını alacağız.
Linkler
https://postgresql.verite.pro/blog/2019/10/14/nondeterministic-collations.html
https://www.cockroachlabs.com/docs/stable/collate.html
https://www.postgresql.org/docs/current/collation.html#COLLATION-NONDETERMINISTIC