2016-12-05 10 views
2

この質問はPostgres doesn't search case-insensitive unicode regexPostgresの機能は

に似ていますが、upper機能は同様に動作しないことが表示されますか? また、サーバーutf8でエンコードしているようです。

CentOS 6でwebfaction private postgresインスタンスを使用していて、クラスタ作成時にロケールを設定する方法がわかりません。

どうすれば解決できますか。

+0

あなたは、あなたには何も言わないものがあります: 'a =#select upper( 'утф'); upper ------- УТФ (1 row) ' –

+0

postgres =#select version(); PostgreSQLのGCCでコンパイルx86_64で、未知のLinux GNU、オン9.4.10(GCC)4.8.5 20150623( レッドハット4.8.5-4)、64ビット (1行) のPostgres =#上部選択( 'утф'); upper ------- утф (1 row) –

+0

hm:/ 'show server_encoding;'?..と 'show lc_collat​​e;'?.. –

答えて

2

変更照合、のように:また、あなたのデータをダンプし、右のロケールでDBにそれを復元することができ

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=# select upper('утф' COLLATE "C"), upper('утф' COLLATE "en_US"); 
upper | 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

1つのステートメントを持つすべてのテーブルに対して、どうすればいいですか? –

+0

ありがとうございます!!!!! –

+0

心配なし、私の喜び –

関連する問題