2016-12-05 3 views
2

Этот вопрос похож на Postgres doesn't search case-insensitive unicode regexфункция Postgres верхний не работает для кириллицы (версия 9.4)

Но оказывается, что upper функция не работает, а? Также, кажется, что кодирование на сервере utf8

Я использую экземпляр private postgres для webfaction на CentOS 6 и не знаю, как установить локаль при создании кластера.

Пожалуйста, помогите, как исправить.

+0

что-то, что вы не скажете: 'a = # select upper ('утф'); наверх ------- УТФ (1 ряд) ' –

+0

postgres = # select version(); PostgreSQL 9.4.10 на x86_64-неизвестно-Linux-гну, составленный GCC (GCC) 4.8.5 20150623 ( Red Hat 4.8.5-4), 64-битный (1 строка) Postgres = # выберите верхнюю ('утф'); верхняя ------- утф (1 строка) –

+0

hm:/'show server_encoding;'? .. и 'show lc_collate;'? .. –

ответ

2

Изменить параметры сортировки, как:

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) 

В качестве альтернативы вы можете сбросить данные и восстановить его в БД с правой локали. На столах восстановления будут построены с правильной сортировкой:

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) 
+0

Как это сделать для всех таблиц с одним выражением? –

+0

Большое спасибо !!!!! –

+0

не беспокойтесь, мое удовольствие –