Re: Choosing default collation/ctype

Laurenz Albe <laurenz.albe@cybertec.at>

From: Laurenz Albe <laurenz.albe@cybertec.at>
To: Daniel Verite <daniel@manitou-mail.org>
Cc: Ron Johnson <ronljohnsonjr@gmail.com>, pgsql-general@lists.postgresql.org
Date: 2026-05-05T11:31:00Z
Lists: pgsql-general
On Tue, 2026-05-05 at 13:16 +0200, Daniel Verite wrote:
> Laurenz Albe wrote:
> 
> > > So if you target Postgres 17+, C.UTF-8 from the builtin provider is
> > > a better choice for UTF-8 databases than "C" .
> > 
> > Yes, "builtin" and the "C" collation is the best default value.
> 
> But my point was that, no, it's not.
> Let's show a concrete example with Postgres 18:
> 
> [...]
>
> It is not the correct uppercasing.

That is true.
But if you are using "C.UTF-8", the semantics of upper() can change
between versions, if Unicode is upgraded.  That bears a residual risk
of OS upgrades breaking indexes on upper(col).

I'd say that the small benefit of better case conversion isn't worth
the risk.  I'd chose "C", and use a natural language collation explicitly
on columns where these things matter.

Yours,
Laurenz Albe