2

新旧のubuntuリポジトリから標準のpostgresqlサーバーがあります。

1 つ目は、postgresql サーバー 8.3.12 です。ここで、lower() 関数はデンマーク文字 'Æ' で正しく動作します

go=#  select lower('Æ');
 lower
-------
 æ
(1 row)

現在、postgres 9.1.9 では関数が機能しません (同じ大文字を返します)。

go=# select lower('Æ');
 lower
-------
Æ
(1 row)

この動作を変更する方法を知っている人はいますか?

(私の本当の問題は、デンマーク語の文字でも ilike が機能しないことですが、上記の例で問題がより明確になると思いました)

4

2 に答える 2

5

データベースはおそらく別のロケールで作成されました。

古いバージョンと新しいバージョンをチェック\l+インします。psqlそれらには異なるロケール設定があります。

他の可能性は、異なるオペレーティング システム/バージョンです。PostgreSQL は libc のロケール規則を使用しており、一部のプラットフォーム (特に Mac OS X) には、少し... 特殊な ... libc があります。

en_AU.UTF-8Fedora 19で実行されているデータベースを使用した9.1.9では、次のようになります。

regress=> select lower('Æ');
 lower 
-------
 æ
(1 row)
于 2013-08-29T11:32:07.207 に答える
3

問題は、PostgreSQL クラスターがインストール時にシステム (Ubuntu 12.04) によって作成され、ロケール (en_DK.UTF8) から継承するのではなく、C を lc_ctype として、ASCII をエンコーディングとして使用していたことであることが判明しました。pg_dropcluster と pg_createcluster を実行した後、正しいロケールとエンコーディングが使用され、すべてが正しく機能し始めました。

于 2013-08-30T10:08:52.943 に答える