Postgres 函数 upper 不适用于西里尔文(版本 9.4)

And*_*unt 4 sql postgresql unicode webfaction

这个问题类似于Postgres 不搜索不区分大小写的 unicode regex

但似乎该upper功能也不起作用?此外,似乎在服务器 utf8 上编码

我在 CentOS 6 上使用 webfaction 私有 postgres 实例,但不知道如何在创建集群时设置语言环境。

请帮忙,如何解决它。

Vao*_*sun 6

更改排序规则,例如:

b=#  select upper('???'  COLLATE "C"), upper('???'  COLLATE "en_US");
 upper | upper
-------+-------
 ???   | ???
(1 row)
Run Code Online (Sandbox Code Playgroud)

更改默认值,如:

b=# create table clt (a text COLLATE "C");
CREATE TABLE
b=# insert into clt select '???';
INSERT 0 1
b=# select upper(a) from clt;
 upper
-------
 ???
(1 row)

b=# alter table clt alter column a set data type text COLLATE "en_US";
ALTER TABLE
b=# select upper(a) from clt;
 upper
-------
 ???
(1 row)
Run Code Online (Sandbox Code Playgroud)

或者,您可以转储数据并使用正确的语言环境将其恢复到数据库。恢复表将使用正确的排序规则构建:

b=# CREATE DATABASE not_c ENCODING 'UTF8'
   lc_ctype='en_US.utf-8'
   lc_collate='en_US.UTF-8' TEMPLATE=template0;
CREATE DATABASE
b=# \c not_c
You are now connected to database "not_c" as user "postgres".
not_c=# create table clt (a text);
CREATE TABLE
not_c=# insert into clt select '???';
INSERT 0 1
not_c=# select upper(a) from clt;
 upper
-------
 ???
(1 row)
Run Code Online (Sandbox Code Playgroud)