Re: BPCHAR description in 8.3. Character Types is misleading and incomplete

From: Sergei Katkovsky <skatkovsky(at)gmail(dot)com>
To: Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Jeff Davis <pgsql(at)j-davis(dot)com>, pgsql-docs(at)lists(dot)postgresql(dot)org
Subject: Re: BPCHAR description in 8.3. Character Types is misleading and incomplete
Date: 2025-10-17 14:18:08
Message-ID: CAAf8JyLJDtbBnx7zc_oPb=16YAHH0PyAh5H_GtZ7R0QJPqthNQ@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-docs

On Fri, Oct 17, 2025 at 4:49 PM Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at> wrote:

> "bpchar" and "varchar", when used without type modifier, are actually
> identical:
>
> SELECT octet_length(BPCHAR 'x '),
> octet_length(VARCHAR 'x '),
> octet_length(TEXT 'x ');
>
> octet_length │ octet_length │ octet_length
> ══════════════╪══════════════╪══════════════
> 4 │ 4 │ 4
>
> The blank-trimming only occurs when a "bpchar" is converted to "text",
> for example when used with the concatenation operator.

Unfortunately, BPCHAR and VARCHAR are not identical in other contexts.
The situation is not the same as with BCHAR(n), which is just an alias
for CHAR(n).
SELECT BPCHAR 'x' = VARCHAR 'x ', VARCHAR 'x' = BPCHAR 'x ',
VARCHAR 'x' = VARCHAR 'x ';
true true false
For comparison with BPCHAR trailing blanks are insignificant, but when
we have VARCHAR on both sides, they matter.

With best regards,
Sergei Katkovskii

In response to

Responses

Browse pgsql-docs by date

  From Date Subject
Next Message Sergei Katkovsky 2025-10-17 14:25:35 Re: BPCHAR description in 8.3. Character Types is misleading and incomplete
Previous Message David G. Johnston 2025-10-17 13:46:02 Re: BPCHAR description in 8.3. Character Types is misleading and incomplete