在 PostgreSQL 中安装 utf8 排序规则

Posted

技术标签:

【中文标题】在 PostgreSQL 中安装 utf8 排序规则【英文标题】:Install utf8 collation in PostgreSQL 【发布时间】:2018-06-11 05:07:48 【问题描述】:

现在我可以在 pgAdmin4 GUI 中创建新数据库时选择Encoding : UTF8

但是,没有选择utf8_general_ci 作为排序规则或字符类型的选项。当我做select * from pg_collation; 时,我没有看到任何与utf8_general_ci 相关的排序规则。

来自 mysql 背景我很困惑。我是否必须在我的 PostgreSQL 10 或 windows10 中安装类似 utf8 的(例如 utf8_general_ciutf8_unicode_ci)排序规则?

我只想拥有相当于 PostgreSQL 的 mySQL collation utf8_general_ci

谢谢

【问题讨论】:

读者注意:Postgres 在版本 10 及更高版本中获得了对 ICU 排序规则的支持。请参阅 Peter Eisentraut 的 post。 【参考方案1】:

utf8 是一种编码(如何将 unicode 字符表示为一系列字节),而不是排序规则(哪个字符在哪个之前)。

我认为与 utf8_general_ci(或更现代的 utf8_unicode_ci)等效的 Postgres 10 排序规则称为 und-x-icu - 这是 ICU 库提供的未定义排序规则(未为任何现实世界语言定义)。这种排序规则可以对来自大多数语言的字符进行相当合理的排序。

ICU 支持是 new feature added in PostgreSQL 10,因此此排序规则不适用于旧 PostgreSQL 版本或在编译期间被禁用时。在此之前,Postgres 使用的是操作系统提供的排序规则支持,这在操作系统之间有所不同。

【讨论】:

新年快乐。是的,我知道编码整理之间的区别。但在 mySQL 术语中,我指的是任何类似 utf8 的排序规则(例如 utf8_general_ciutf8_unicode_ci)。我编辑了我的 OP 以便更好地编写。无论如何,如果 und-x-icu 是一个未定义的排序规则,那么我也可以使用 C 排序规则,那也是一个未定义的排序规则,对吧?谢谢 我做了一些测试,似乎在当前版本 (10.1) 中,ICU 支持不像我想象的那么完整。似乎不可能使用 und-x-icu 语言环境创建数据库 - 只为某些列显式设置它。因此,在它得到改进之前,您可能不得不使用create database datname template='template0' encoding='UTF8' lc_ctype='C' lc_collate='C'; 或其他操作系统提供的语言环境。 你好。我有 PostgreSQL 10.1,由 Visual C++ build 1800 编译,win10 笔记本电脑中的 64 位。我刚刚做了CREATE DATABASE test WITH OWNER = postgres TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'und-x-icu' LC_CTYPE = 'und-x-icu' TABLESPACE = pg_default CONNECTION LIMIT = -1;,它奏效了。我还可以在 pgAdmin4 GUI 中查看属性。 另外,我要感谢你,因为我不了解 ICU,你告知了它,它看起来很棒,与 C 相比。它不依赖于操作系统,它是面向未来的,基于在用于排序和比较的 Unicode 标准(很像 utf8_unicode_ci)上,它实现了 CLDR 排序算法,它是 Unicode 排序算法 (UCA) 的扩展,它是 ISO 14651 的扩展。here、here 和 here 您好,在 PG 11.1、Win10 x64 CREATE DATABASE dbname WITH OWNER = postgres TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'und-x-icu' LC_CTYPE = 'und-x-icu' TABLESPACE = pg_default CONNECTION LIMIT = -1; COMMENT ON DATABASE dbname IS '...'; 上测试,它可以工作。

以上是关于在 PostgreSQL 中安装 utf8 排序规则的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 docker 镜像中安装 postgresql?

如何在 Windows 10 中安装 PostgreSQL 和连接设置

怎样在centos中安装postgresql

在Fedora中安装PostgreSQL并配置密码和开启远程登陆

Linux中安装PostgreSQL-10.1

在Centos7中安装PostgreSQL9.4的步骤详解