PostgreSQL 8.4とUbuntu 10.04は、スウェーデン語アルファベットのWとVのソート方法を更新できません。つまり、それはまだ、この(スウェーデンの発注のための古い定義)のように同じ文字としてそれらを注文です:ロケールを考慮したタプルのリストをソートする(スウェーデン語の注文)
- 和
- Vbの
- Wcが
- Vdの
それは(あるべきスウェーデンの注文の新しい定義):
- Vb
- Vdは
- Waが
- Wcの
私が構築してるのPython/Djangoのウェブサイトに正しくこれを注文する必要があります。私は、* values_list *を使用してDjango QuerySetから作成されたタプルのリストを注文する様々な方法を試みました。しかし、スウェーデン語であるため、å、ä、öの文字を正しく並べ替える必要があります。
今########## Ordering One ##############
Vb
Vd
Wa
Wc
äa
Åa
Öa
########## Ordering Two ##############
Wa
Vb
Wc
Vd
Åa
äa
Öa
、私がしたいことは、これらのようにV/Wとå両方の組み合わせです:今、私はどちらか一方または両方の両方ではない...
list_of_tuples = [(u'Wa', 1), (u'Vb',2), (u'Wc',3), (u'Vd',4), (u'Öa',5), (u'äa',6), (u'Åa',7)]
print '########## Ordering One ##############'
ordered_list_one = sorted(list_of_tuples, key=lambda t: tuple(t[0].lower()))
for item in ordered_list_one:
print item[0]
print '########## Ordering Two ##############'
locale.setlocale(locale.LC_ALL, "sv_SE.utf8")
list_of_names = [u'Wa', u'Vb', u'Wc', u'Vd', u'Öa', u'äa', u'Åa']
ordered_list_two = sorted(list_of_names, cmp=locale.strcoll)
for item in ordered_list_two:
print item
他の方法の例が与える持っています、ä、ö順序が正しい。より正確には。私はを希望します。にロケールを尊重してください。各タプルで2番目の項目(オブジェクトID)を使用することで、Djangoで正しいオブジェクトを取得できました。
私はこれが可能であることを疑い始めていますか? PostgreSQLをより新しいバージョンにアップグレードして、照合をよりうまく処理し、Djangoで生のSQLを使用することは可能でしょうか?
私はPostgres 8.4とUbuntu 10.04 LTSがうまくいくはずだと思います。あなたのクラスタはどのロケールに設定されていますか?コマンド "show lc_collate;"でこれを知ることができます。 –
私は、ロケールがクラスタ(sv_SE)に対して正しいことを述べるべきでした。私はこれを以前に変更して、å、ä、öが正しくソートされるようにしなければなりませんでした。 – daru