显然,PostgreSQL 8.4和Ubuntu 10.04无法处理更新的方式来对W和V进行瑞典字母排序。也就是说,它仍然命令他们像这样(旧定义为瑞典排序)相同的字母:考虑区域设置的元组排序列表(瑞典语排序)
- 娃
- Vb的
- 厕所
- Vd的
它应该是(瑞典定购的新定义):
- Vb
- Vd的
- 娃
- 厕所
我需要正确订购此为一个Python/Django的网站我建立。我已经尝试过各种方法来订购使用* values_list *从Django QuerySet创建的元组列表。但是因为它也是瑞典语ä,ä和ö字母需要正确排列。现在我有一个或其他方式都不能同时..
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
的例子给出了:
########## Ordering One ##############
Vb
Vd
Wa
Wc
äa
Åa
Öa
########## Ordering Two ##############
Wa
Vb
Wc
Vd
Åa
äa
Öa
现在,我要的是它们的组合,这样既V/W和,ä,ö排序是正确的。更确切地说。我想订购一个尊重区域设置。然后在每个元组中使用第二项(对象ID),我可以在Django中获取正确的对象。
我开始怀疑这是可能的吗?将PostgreSQL升级到更好的版本可以更好地处理排序规则,然后在Django中使用原始SQL吗?
我认为Postgres 8.4和Ubuntu 10.04 LTS应该没问题。您的集群设置了哪些区域设置?你可以通过命令“show lc_collate;”来告诉它 – 2012-03-03 22:12:19
我应该提到该区域对于群集(sv_SE)是正确的。我必须早一点改变这个才能使å,ä和ö被正确排序。 – daru 2012-03-04 08:27:39