Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vn0Aw-0019tE-0k for pgsql-docs@arkaria.postgresql.org; Mon, 02 Feb 2026 20:05:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vn09v-0013l3-1L for pgsql-docs@arkaria.postgresql.org; Mon, 02 Feb 2026 20:04:31 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vn09v-0013ku-0J for pgsql-docs@lists.postgresql.org; Mon, 02 Feb 2026 20:04:31 +0000 Received: from mail-lj1-x236.google.com ([2a00:1450:4864:20::236]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vn09s-00000000ibN-1r4u for pgsql-docs@lists.postgresql.org; Mon, 02 Feb 2026 20:04:30 +0000 Received: by mail-lj1-x236.google.com with SMTP id 38308e7fff4ca-385bdc72422so41427701fa.1 for ; Mon, 02 Feb 2026 12:04:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770062666; cv=none; d=google.com; s=arc-20240605; b=i6gOz9ldkiSM4kOIUKqTFhruPuevBjWfPwWGx9I3sK3b3NgG8DFGqa3Xsk8BIY42+h HSt0BLIDQqvI41v24xBz1W6O3bGfDJAYb1h9ef5BYecObps14hI++3Tiiwsq0nvmY7kz /Iuv4NK/Lku5w/gmFDH9NOBdNUk2ZSpfEwQwOny4hkY3eGjW+Luqnz20OkAe3TdC/KY8 9mg83xaRW/G/VihP3GIoEIPvTDmcblSYerUmWijcB4fhUW7V5vuSpwNdyVJN+0TeHuih iguI07ewMYi+cVhzzn1Igt3t4DEFWZmgsoOF7lNv6GzwARyIJsCvlvzO+42WFVmaGLSq 2UBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=Cw1OeagPnmvVnRlpHmSgr9MjQw6I3tzQw94Ngi2vYEQ=; fh=XvPYXqdoKBKZ4q70qiFJWoSNNd3I9lZJ/QInp1pzQpA=; b=EjhO0RzB3Vk2H3cWLIyfNAmCnE6nC3O/YbYnraC6qsDuIBPDTdDB59A6ahPmrkUWs1 zRzv+PKj4v1hEP8ZVqE78fPeFxDeWsycknZY/Uyc6d6OuFB2tV6bjXHiwyj+SI2pZP8G 1lqE7kZIfUTSLdzMRCadxA5lTzDfQnQiWwDKuW0lQhCHCzPVtgPbeNizwM850Kdj/y3w Xj7ufmkhMiNWttOV4LPnp8gCICZGmwk594XxfKCsK5gmaEUCf0qqIrAbh+G0KAzaowur XbS/R4qSSp5qOVHlBRM+oYEKtob9CthiSu+zRAYzJNAQ2k1WxUT0DlR7km38fA3wYCTA Cbwg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770062666; x=1770667466; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=Cw1OeagPnmvVnRlpHmSgr9MjQw6I3tzQw94Ngi2vYEQ=; b=kkHRfoInn0rkrKWQXqbG4lZ53JPPqUeTtvE8oMCocJZUGM+UsxpmzQleCDz8kTgAFl W6vr1oNu3xUzBGCl3LCs0znpc04eemV7e8N5WfBAP7nZcdlyATQZ/KAXB2qj7IwVwXbJ +qDKq0p0jZGY0grrf3NLMR+wGYRNbxptkZmZyRZqqhrcLbXhHuw31a6Mqnyj3hJHwAIn YV10504qzaA2XwbNGiGoUZGIpiPxeldI724PJwMEmULZQ/dHvZPtI7iL9luXgy8A8uX+ QAHNIwIU6INN65GuQQFumlNms5X1Gr5bm6biSLQluUGkg4bzrR5a4H6vMG5PmvJKxYxi Xcsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770062666; x=1770667466; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Cw1OeagPnmvVnRlpHmSgr9MjQw6I3tzQw94Ngi2vYEQ=; b=YTDY5ousoId6ij7OBQ8aRSJk3/SEU8D6hOesijAeZOBPmwYaOyHfe7CxnscHQTu2+3 TW951COFx7T8QywAEjDj1O1/lmkXuuoqcK/RYk64otHzsyMs+k2FWc2lCIJHj6+eC6s0 5vmoLS7WzQBPecI+GB2oVvwpURNnTStbyf8okGXlQtt1ugj2ip70UvnX5otBzfVWRXwi bf7f8IfeeqOKI3CQi9FzZmk6qcAqIJgC68JlYPev/FnQRDDQIoQiciT0rFqIhhAChv03 7GXQOwid5N0HZDIiYNeeWXrPFaA+AYOlcYcqfalvAQ3/UUmVZuY9iqHhA+calqc6qDEI sgjw== X-Gm-Message-State: AOJu0YxmJtcpkweR4XdMp5gM26L6j/9ncgsTNnfQAKx6q02smipy8IFU 09JOGHj+dtDHNhokQRXQ7s6ntqbRwQwf2OCUbutrJDoOHkO1Q/Fm5xcF2COKjm7YXxyxkPLixv6 Qkpc8UvHMDekTJLzZQdb3GXZ5ZGdo1us= X-Gm-Gg: AZuq6aJNUYxCmomNU9Qh+4cgoQsinz0ueW4l80DU0kfUHJv9NasIz6eL72i+gDuQ0Lc vktXZwDkEFnweQ+e13sJ/O+0FiS4bwSLcM2cb1M8A+cgu/5U9YnQjbf0IX7GJwWdQ8mKED5Gp0L tlc7W8wjfONHrxnz5YHLFgbtTe6RJwOg8Wr4grgR4Y6uETBbG8VYTDtIF6k0I1iZXA776MeC/Yi /V+DnO/7obSorEbaRZfdSgrzEsJLtyVvoT3R0aePkrsFVmPT2BwHX/Sbzv6tpVZ7LLDL5EUn26q qOOhSxs= X-Received: by 2002:a05:651c:1462:b0:385:c213:4b5 with SMTP id 38308e7fff4ca-386466dcf34mr39085251fa.37.1770062665689; Mon, 02 Feb 2026 12:04:25 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Hoda Salim Date: Mon, 2 Feb 2026 22:04:12 +0200 X-Gm-Features: AZwV_QiJku6AHHiWfSLEutwws_gvUgmTu07BrRvNFS_JZcXkPJM9TI-5-LXxqWk Message-ID: Subject: Re: [PATCH] docs: document N'...' national character string literal syntax To: Erik Wienhold Cc: pgsql-docs@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000006b477f0649dcd471" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006b477f0649dcd471 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable > 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=E2=80=AFPM Erik Wienhold 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. > > > + PostgreSQL does not implement a separa= te > > + national character set; it treats N'...' as > > + equivalent to a regular string constant cast to the > > + character type, that is, '...'::character, > > + 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/om3g7p7u3ztlrdp4tfswgulavljgn2f= e6u2agk34mrr65dffuu%40cpzlzuv6flko > [2] https://www.postgresql.org/message-id/1275895438.1849.1.camel@fsopti5= 79.F-Secure.com > [3] https://www.postgresql.org/docs/current/features-sql-standard.html > [4] https://www.postgresql.org/docs/current/datatype-character.html > > -- > Erik Wienhold --0000000000006b477f0649dcd471 Content-Type: application/octet-stream; name="v2-0001-docs-document-N-.-national-character-string-liter.patch" Content-Disposition: attachment; filename="v2-0001-docs-document-N-.-national-character-string-liter.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ml5lefmb0 RnJvbSA4MjZmNDY5ZmU2ODFiOTg3NTQzN2JmYjdlM2M4MDVjMDkyY2Y4YjBhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIb2RhU2FsaW0gPGhvZGEucy5zYWxpbUBnbWFpbC5jb20+CkRh dGU6IE1vbiwgMiBGZWIgMjAyNiAxNDo1NDozNyArMDAwMApTdWJqZWN0OiBbUEFUQ0ggdjJdIGRv Y3M6IGRvY3VtZW50IE4nLi4uJyBuYXRpb25hbCBjaGFyYWN0ZXIgc3RyaW5nIGxpdGVyYWwKIHN5 bnRheAoKRG9jdW1lbnQgdGhlIE4nLi4uJyBzdHJpbmcgbGl0ZXJhbCBzeW50YXggaW4gdGhlIExl eGljYWwgU3RydWN0dXJlCnNlY3Rpb24gb2YgdGhlIGRvY3VtZW50YXRpb24uIFRoaXMgU1FMLXN0 YW5kYXJkIHN5bnRheCBmb3IgbmF0aW9uYWwKY2hhcmFjdGVyIHN0cmluZyBsaXRlcmFscyBoYXMg YmVlbiBzdXBwb3J0ZWQgYnkgUG9zdGdyZVNRTCBidXQgd2FzCnByZXZpb3VzbHkgdW5kb2N1bWVu dGVkLgoKVGhlIGRvY3VtZW50YXRpb24gZXhwbGFpbnMgdGhhdCB3aGlsZSB0aGUgU1FMIHN0YW5k YXJkIHNwZWNpZmllcyB0aGlzCnN5bnRheCBmb3IgYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBu YXRpb25hbCBjaGFyYWN0ZXIgc2V0LCBQb3N0Z3JlU1FMCnRyZWF0cyBOJy4uLicgYXMgZXF1aXZh bGVudCB0byBhIGJwY2hhciAoYmxhbmstcGFkZGVkIGNoYXJhY3RlcikgdHlwZQpsaXRlcmFsLCBz aW5jZSBQb3N0Z3JlU1FMIHVzZXMgYSBzaW5nbGUgY2hhcmFjdGVyIHNldCBmb3IgYWxsIHN0cmlu Zwp0eXBlcy4KLS0tCiBkb2Mvc3JjL3NnbWwvc3ludGF4LnNnbWwgfCA0MSArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNDEgaW5zZXJ0aW9u cygrKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9zeW50YXguc2dtbCBiL2RvYy9zcmMvc2dt bC9zeW50YXguc2dtbAppbmRleCA2NzQ4Mjk5Njg2MS4uYjU5ZTcxYTI2NjQgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9zeW50YXguc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvc3ludGF4LnNnbWwK QEAgLTU5MCw2ICs1OTAsNDcgQEAgJGZ1bmN0aW9uJAogICAgIDwvcGFyYT4KICAgIDwvc2VjdDM+ CgorICAgPHNlY3QzIGlkPSJzcWwtc3ludGF4LXN0cmluZ3MtbmF0aW9uYWwiPgorICAgIDx0aXRs ZT5OYXRpb25hbCBDaGFyYWN0ZXIgU3RyaW5nIENvbnN0YW50czwvdGl0bGU+CisKKyAgICA8aW5k ZXh0ZXJtIHpvbmU9InNxbC1zeW50YXgtc3RyaW5ncy1uYXRpb25hbCI+CisgICAgIDxwcmltYXJ5 Pm5hdGlvbmFsIGNoYXJhY3RlcjwvcHJpbWFyeT4KKyAgICAgPHNlY29uZGFyeT5zdHJpbmcgY29u c3RhbnQ8L3NlY29uZGFyeT4KKyAgICA8L2luZGV4dGVybT4KKworICAgIDxwYXJhPgorICAgICA8 cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGFjY2VwdHMgc3RyaW5nIGNvbnN0 YW50cworICAgICB3aXRoIGEgbGVhZGluZyA8bGl0ZXJhbD5OPC9saXRlcmFsPiAodXBwZXIgb3Ig bG93ZXIgY2FzZSkKKyAgICAgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBvcGVuaW5nIHNpbmdsZSBx dW90ZSwgZm9yCisgICAgIGV4YW1wbGUgPGxpdGVyYWw+TidoZWxsbyc8L2xpdGVyYWw+LiAgVGhp cyBzeW50YXggaXMgc3BlY2lmaWVkIGJ5CisgICAgIHRoZSA8YWNyb255bT5TUUw8L2Fjcm9ueW0+ IHN0YW5kYXJkIGZvciBpZGVudGlmeWluZyBzdHJpbmcKKyAgICAgbGl0ZXJhbHMgb2YgPHF1b3Rl Pm5hdGlvbmFsIGNoYXJhY3RlcjwvcXVvdGU+IHR5cGVzCisgICAgICg8dHlwZT5OQ0hBUjwvdHlw ZT4gYW5kIDx0eXBlPk5DSEFSIFZBUllJTkc8L3R5cGU+KS4KKyAgICA8L3BhcmE+CisKKyAgICA8 cGFyYT4KKyAgICAgIFRoZSA8YWNyb255bT5TUUw8L2Fjcm9ueW0+IHN0YW5kYXJkIHNwZWNpZmll cyB0aGF0IHN0cmluZ3Mgd3JpdHRlbgorICAgICAgd2l0aCB0aGlzIHN5bnRheCBzaG91bGQgdXNl IGFuIDxxdW90ZT5pbXBsZW1lbnRhdGlvbi1kZWZpbmVkCisgICAgICBuYXRpb25hbCBjaGFyYWN0 ZXIgc2V0PC9xdW90ZT4uCisgICAgICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5h bWU+IGRvZXMgbm90IGltcGxlbWVudCBhIHNlcGFyYXRlCisgICAgICBuYXRpb25hbCBjaGFyYWN0 ZXIgc2V0OyBpdCB0cmVhdHMgPGxpdGVyYWw+TicuLi4nPC9saXRlcmFsPiBhcworICAgICAgZXF1 aXZhbGVudCB0byBhIHN0cmluZyBjb25zdGFudCBvZiB0eXBlIDx0eXBlPmJwY2hhcjwvdHlwZT4K KyAgICAgIChibGFuay1wYWRkZWQgY2hhcmFjdGVyKSwgZm9yIGV4YW1wbGUgPGxpdGVyYWw+Tido ZWxsbyc8L2xpdGVyYWw+CisgICAgICBoYXMgdGhlIHNhbWUgdHlwZSBhbmQgdmFsdWUgYXMgPGxp dGVyYWw+J2hlbGxvJzo6YnBjaGFyPC9saXRlcmFsPi4KKyAgICAgIE5vdGUgdGhhdCB0cmFpbGlu ZyBzcGFjZXMgYXJlIHNlbWFudGljYWxseSBpbnNpZ25pZmljYW50CisgICAgICBpbiA8dHlwZT5i cGNoYXI8L3R5cGU+IHZhbHVlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgVGhp cyBzeW50YXggaXMgYWNjZXB0ZWQgcHJpbWFyaWx5IGZvciBjb21wYXRpYmlsaXR5IHdpdGggU1FM CisgICAgIG1pZ3JhdGVkIGZyb20gb3RoZXIgZGF0YWJhc2Ugc3lzdGVtcy4gIFNpbmNlCisgICAg IDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gdXNlcyBhIHNpbmdsZSBjaGFy YWN0ZXIgc2V0CisgICAgIGZvciBhbGwgc3RyaW5nIHR5cGVzIChkZXRlcm1pbmVkIGJ5IHRoZSBk YXRhYmFzZSBlbmNvZGluZyksCisgICAgIHRoZXJlIGlzIHR5cGljYWxseSBubyBhZHZhbnRhZ2Ug dG8gdXNpbmcKKyAgICAgPGxpdGVyYWw+TicuLi4nPC9saXRlcmFsPiBvdmVyIHJlZ3VsYXIgc3Ry aW5nIGNvbnN0YW50cy4KKyAgICA8L3BhcmE+CisgICA8L3NlY3QzPgorCiAgICA8c2VjdDMgaWQ9 InNxbC1zeW50YXgtYml0LXN0cmluZ3MiPgogICAgIDx0aXRsZT5CaXQtU3RyaW5nIENvbnN0YW50 czwvdGl0bGU+CgotLQoyLjQzLjAK --0000000000006b477f0649dcd471--