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

13

我正在为Windows上的Bitbucket Server配置PostgreSQL数据库。在官方指南中,它说:

必须配置数据库使用UTF-8字符集。

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

  • 必须将字符编码设置为utf8编码。
  • 还必须将排序规则设置为utf8。已知其他排序规则(例如"C")会导致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实际上是必需的吗?如果是,我应该如何做?

2个回答

24

假设你正在尝试在Windows上创建一个具有US区域设置排序和字符分类的PostgreSQL数据库,并使用UTF-8编码,以下是原始问题中发布的代码示例的修改,可用于实现该结果。

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环境(例如Windows子系统的Ubuntu)中创建类似的数据库,可以按照以下步骤操作(根据具体环境,您可能需要使用“en_US.UTF8”作为地区设置代替):

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;

en_US.UTF-8在Windows上不是本地化环境,因此会导致错误。 - spankmaster79
你是对的 @spankmaster79,查看编辑以在Windows上创建数据库而无需使用Linux子系统。 - benvc
对于土耳其语环境:CREATE DATABASE "example_db" WITH OWNER=postgres ENCODING 'UTF-8' LC_COLLATE 'tr_TR.UTF-8' LC_CTYPE 'tr_TR.UTF-8' TEMPLATE template0; - Zafer

11

没有UTF8排序规则。UTF8是一种将字符编码为数字的方法,也被称为编码方式。排序规则定义了字符(和组合字符)的排序方式。

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

你应该向编写软件的人询问应该使用哪个排序规则。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接