> nchar is an alias of bpchar. There's no cast to char behind the scenes > since that would truncate the string: > > select n'foo', 'foo'::character; > bpchar | bpchar > --------+-------- > foo | f > (1 row)
Thank you for catching this! I verified the behavior and updated the documentation to correctly state that N'...' is equivalent to a bpchar literal. > Should we also mention the nchar alias in [4]? > [4] https://www.postgresql.org/docs/current/datatype-character.html I'm happy to add that in a v3 if you think it belongs in this patch. I wasn't sure if it would be preferred separately or together. Updated patch attached. -- Hoda Salim On Mon, Feb 2, 2026 at 7:09 PM Erik Wienhold <[email protected]> wrote: > > On 2026-02-02 16:05 +0100, Hoda Salim wrote: > > This patch documents the N'...' national character string literal > > syntax, which has been supported by PostgreSQL but was previously > > undocumented. > > > > The documentation explains: > > - What the syntax is (N'hello') > > - What the SQL standard specifies (implementation-defined national > > character set) > > - What PostgreSQL actually does (treats it as a cast to character type) > > - Why it exists (compatibility with SQL migrated from other databases) > > > > I verified the documentation builds without errors. > > +1 > > I brought up the missing documentation before [1], but wasn't sure at > the time if Postgres conforms to the SQL standard (mainly because of > [2]). Now I see that [3] already claims to support national character > (F421). That entry was commented with "syntax accepted" until commit > 35223af0579. I read that as "fully supported" now. > > > + <productname>PostgreSQL</productname> does not implement a separate > > + national character set; it treats <literal>N'...'</literal> as > > + equivalent to a regular string constant cast to the > > + <type>character</type> type, that is, > > <literal>'...'::character</literal>, > > + using the database's character set. > > nchar is an alias of bpchar. There's no cast to char behind the scenes > since that would truncate the string: > > select n'foo', 'foo'::character; > bpchar | bpchar > --------+-------- > foo | f > (1 row) > > Should we also mention the nchar alias in [4]? > > [1] > https://www.postgresql.org/message-id/om3g7p7u3ztlrdp4tfswgulavljgn2fe6u2agk34mrr65dffuu%40cpzlzuv6flko > [2] > https://www.postgresql.org/message-id/[email protected] > [3] https://www.postgresql.org/docs/current/features-sql-standard.html > [4] https://www.postgresql.org/docs/current/datatype-character.html > > -- > Erik Wienhold
v2-0001-docs-document-N-.-national-character-string-liter.patch
Description: Binary data
