在PostgreSQL中安装utf8排序规则

sle*_*vin 5 postgresql encoding locale collation utf-8

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

但是,没有选择utf8_general_ci作为校对或字符类型的选项.当我这样做时,select * from pg_collation;我没有看到任何相关的整理utf8_general_ci.

来自mySQL背景我很困惑.我必须安装UTF8样(例如utf8_general_ci,utf8_unicode_ci在我的PostgreSQL 10或windows10)整理?

我只想拥有相当于mySQL collation utf8_general_ciPostgreSQL的东西.

谢谢

Tom*_*zky 7

utf8 是一种编码(如何将unicode字符表示为一系列字节),而不是排序规则(该字符在其之前进行).

我认为相当于utf8_general_ci(或更现代utf8_unicode_ci)的Postgres 10校对被称为und-x-icu- 这是ICU库提供的未定义的校对(未定义为任何现实世界语言).这种整理将从大多数语言中排序相当合理的字符.

ICU支持是PostgreSQL 10中添加的一项新功能,因此这种排序规则不适用于较旧的PostgreSQL版本,也不适用于编译期间禁用的版本.之前Postgres使用操作系统提供的整理支持,这在操作系统之间有所不同.

  • 我做了一些测试,似乎在当前版本 (10.1) 中,ICU 支持并不像我想象的那么完整。似乎不可能使用“und-x-icu”语言环境创建数据库 - 只为某些列明确设置它。因此,在改进之前,您可能必须使用“创建数据库 datname template='template0' encoding='UTF8' lc_ctype='C' lc_collat​​e='C';` 或其他操作系统提供的语言环境。 (2认同)
  • 你好,我们又见面了。我有 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 中看到这些属性。 (2认同)