2

~*文字列にドイツ語のウムラウトなどの非ASCII文字が含まれている場合に、PostgreSQL8.4.3で大文字と小文字を区別しないパターンマッチングを演算子で実行しようとしています。データベース、端末、およびその他すべては、UTF-8を使用するように構成されています。

簡単に言うと、問題は次のとおりです。

SELECT 'Ö' ~* 'ö';      -- false

動作する他のバリアントがあります:

SELECT 'Ö' ILIKE 'ö';     -- true
SELECT 'Ö' ~* '[Öö]';     -- true
SELECT LOWER('Ö') ~* 'ö'; -- true

これらの選択肢のどれも私を特に幸せにしません。ILIKEは正規表現を使用しません。[Öö]は検索語を書き直すことを含みます。~*LOWER()はおそらく最善の回避策ですが、オペレーターを想定どおりに動作させたいと思っています。

前もって感謝します。

4

2 に答える 2

4

これは、9.0より前のバージョンのPostgreSQLのバグです。
9.0の変更ログにあります:http ://www.postgresql.org/docs/9.0/static/release-9-0.html#AEN99075

Ubuntuを使用した9.0beta2でのテストは次のとおりです。

SELECT 'Ö' ~* 'ö';
 ?column? 
----------
 t
(1 row)
于 2010-06-23T20:49:57.947 に答える
1

私はこのクエリで真実になります:

SELECT 'Ö' ~* 'ö'; -- true

しかし、私はこれらの設定でOS X10.5.8でバージョン9.0beta2を使用しました:

CREATE DATABASE test
  WITH OWNER = postgres
       ENCODING = 'UTF8'
       TABLESPACE = pg_default
       LC_COLLATE = 'nl_NL.UTF-8'
       LC_CTYPE = 'nl_NL.UTF-8'
       CONNECTION LIMIT = -1;

編集:バージョン8.3.7でも同じ結果。エンコーディングに問題があるようです。

于 2010-06-23T19:29:14.827 に答える