Функция postgres upper не работает для кириллицы (версия 9.4)

Этот вопрос похож на Postgres не ищет регистронезависимый регулярных выражений Unicode

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

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

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

1 ответ

Решение

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

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)
Другие вопросы по тегам