此问题与Postgres doesn't search case-insensitive unicode regex
类似但似乎upper
功能不起作用?
此外,似乎在服务器utf8上编码
我在CentOS 6上使用webfaction私有postgres实例,并且不知道如何在创建集群时设置语言环境。
请帮忙,如何解决。
答案 0 :(得分:4)
更改整理,例如:
b=# select upper('утф' COLLATE "C"), upper('утф' COLLATE "en_US");
upper | upper
-------+-------
утф | УТФ
(1 row)
更改默认值:
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)
或者,您可以转储数据并使用正确的语言环境将其还原到db。在恢复表上将使用正确的排序规则构建:
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)