2017-10-24 26 views
0

AFAIK次の3つのテストはすべてtrue(t)を返します。彼らは実際に私がCOLLATE "de_DE"を付加すると動作します。UmlautsでのPostgreSQLパターンの一致

私はこれを対話型のデータベース端末で実行していますので、照合が有効になっていないのでしょうか?どの照合が有効であるかを何らかの形で確認することができますか?もしそうなら、(UTF-8でエンコードされた)データを変更せずに変更することができますか?また

          version            
------------------------------------------------------------------------------------------------ 
PostgreSQL 9.4.13 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit 

=> SELECT 'Ü' ~* 'Ü'; 
?column? 
---------- 
t 

=> SELECT 'Ü' ~* 'ü'; 
?column? 
---------- 
f 

=> SELECT 'Ü' ~* '\mÜ'; 
?column? 
---------- 
f 

、ウムラウトと小文字を区別しないパターンマッチを作るための方法は、すなわち'Ü' ~*SOMETHINGHERE '\mU'リターンtを持っている、あるのでしょうか?または、すべてのクエリ呼び出しにCOLLATEを追加するだけですか?または、私はちょうど次のことを実行する必要がありますが、実際にはデータに触れません、ルックアップの動作とインデックスのみですか?

ALTER TABLE articles ALTER COLUMN title SET DATA TYPE VARCHAR(255) COLLATE "de_DE"; 

答えて

1

照合が指定されていない場合に使用されるデフォルトの照合を使用すると、異なる照合を使用するには

SHOW lc_collate; 

または

SELECT current_setting('lc_collate'); 

SQL文を見つけることができるデータベースの照合順序であり、既定の照合では、明示的にCOLLATEを照会で使用して照合を指定するか、提案したようにALTER TABLEを使用する必要があります。

データを書き換えてはならず、インデックスも変更されません。

関連する問題