如何在 Windows 上的 PostgreSQL 中使用 UTF-8 排序规则创建数据库?

How to create a database with UTF-8 collation in PostgreSQL on Windows?

我正在 Windows 上为 Bitbucket 服务器配置 PostgreSQL 数据库。在官方 guide 中说:

The database must be configured to use the UTF-8 character set.

它并没有严格说你必须将排序规则设置为 UTF-8,但对于其他 atlassian 产品,建议这样做,所以我假设 Bitbucket Server 也是如此。 Confluence 文档中的示例:

  • Character encoding must be set to utf8 encoding.
  • Collation must also be set to utf8. Other collations, such as "C", are known to cause issues with Confluence.

这就是我现在拥有的,问题是它将排序规则设置为 English_United States.1252:

CREATE DATABASE test
WITH OWNER "postgres"
ENCODING 'UTF8'
LC_COLLATE = 'american_usa'
LC_CTYPE = 'american_usa'
TEMPLATE template0;

是否真的需要将排序规则设置为 UTF-8?如果是,我该怎么做?

没有 UTF8 归类。 UTF8 是一种将字符编码为数字的方式,即所谓的编码。排序规则定义字符(和复合字符)的排序方式。

虽然您必须选择与 UNIX 上的 PostgreSQL 数据库编码匹配的排序规则,但 Windows 不需要。也许您正在阅读的文档是针对 UNIX 的。

你应该问写软件的人告诉你使用什么排序规则。

假设您正尝试在 Windows 上使用 UTF-8 编码创建具有美国语言环境排序顺序和字符分类的 PostgreSQL 数据库,以下是对原始问题中发布的代码示例的修改,可能用于实现该结果。

CREATE DATABASE "example_db"
WITH OWNER "postgres"
ENCODING 'UTF8'
LC_COLLATE = 'en-US'
LC_CTYPE = 'en-US'
TEMPLATE template0;

用于终端复制/粘贴的一种线性格式:

CREATE DATABASE "example_db" WITH OWNER "postgres" ENCODING 'UTF8' LC_COLLATE = 'en-US' LC_CTYPE = 'en-US' TEMPLATE template0;

对于任何试图在 Linux 环境中创建类似数据库的人,例如 Ubuntu 在 Linux 的 Windows 子系统上,您可以执行以下操作(取决于特定环境,您可能需要使用 'en_US.UTF8' 作为 locale 代替):

CREATE DATABASE "example_db"
WITH OWNER "postgres"
ENCODING 'UTF8'
LC_COLLATE = 'en_US.UTF-8'
LC_CTYPE = 'en_US.UTF-8'
TEMPLATE template0;

用于终端复制/粘贴的一种线性格式:

CREATE DATABASE "example_db" WITH OWNER "postgres" ENCODING 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' TEMPLATE template0;