SQLクエリで「orderby」ステートメントを機能させようとしています。しかし、何らかの理由で、デンマークの特殊文字は、その価値を評価する代わりに拡張されます。
SELECT roadname FROM mytable ORDER BY roadname
結果:
- Abildlunden
- Æblerosestien
- Agern Alle 1
真ん中の結果は最後になるはずです。
ロケールはデンマーク語に設定されているため、デンマーク語の特殊文字の値を知っている必要があります。
SQLクエリで「orderby」ステートメントを機能させようとしています。しかし、何らかの理由で、デンマークの特殊文字は、その価値を評価する代わりに拡張されます。
SELECT roadname FROM mytable ORDER BY roadname
結果:
真ん中の結果は最後になるはずです。
ロケールはデンマーク語に設定されているため、デンマーク語の特殊文字の値を知っている必要があります。
あなたのデータベースの照合は何ですか?(使用しているPostgreSQLのバージョンを指定することもできます)psqlの「\l」を使用して確認します。
比較対照:
steve@steve@[local] =# select * from (values('Abildlunden'),('Æblerosestien'),('Agern Alle 1')) x(word)
order by word collate "en_GB";
word
---------------
Abildlunden
Æblerosestien
Agern Alle 1
(3 rows)
steve@steve@[local] =# select * from (values('Abildlunden'),('Æblerosestien'),('Agern Alle 1')) x(word)
order by word collate "da_DK";
word
---------------
Abildlunden
Agern Alle 1
Æblerosestien
(3 rows)
データベース照合は、データベースクラスターを作成するときに、その時点で設定したロケールから設定されます。パッケージマネージャー(apt-getなど)を介してPostgreSQLをインストールした場合は、system-defaultロケールから取得されている可能性があります。
特定の列で使用されている照合、または特定の式で使用されている照合をオーバーライドできます(上記の例で行われているように)。ただし、(可能性が高い)何も指定しない場合は、データベースのデフォルトが使用されます(データベースの作成時にテンプレートデータベースから継承され、クラスターの作成時にテンプレートデータベースの照合が修正されます)
全体を通してデフォルトの照合として使用したいがda_DK
、現在データベースのデフォルトではない場合、最も簡単なオプションは、データベースをダンプしてから、クラスターをドロップして再作成し、照合先initdb
(またはpg_createcluster
使用するツール)を指定することです。サーバーを作成します)
ところで、質問はうまく表現されていません。PostgreSQLは「特殊」文字をほとんど無視しておらず、「Æ」を「AE」に正しく展開しています。これは英語の正しい規則です。最後に「Æ」を照合することは、実際にはローカライズされていない動作に似ています。
照合ドキュメント:http ://www.postgresql.org/docs/current/static/collation.html