这是我的flask.SQLAlchemy查询:
available_subservices = (
ServicesForOffer.query
.filter_by(type=u'Дополнительная')
.order_by(ServicesForOffer.name)
.all()
)
所以我把它打印出来:
for subs in available_subservices:
print subs.name
我所看到的是:
Доп.створка
Окно с двойными рамами (2 створки)
Окно с двойными рамами (3 створки)
окно с балконной дверью
Эркер
Мойка окон
Мойка окон, уборка кухни, уборка ванной и сан.узла
мытье холодильника
балкон
глажка
дорога
Разбор шкафа/антресоли/гардеробной
Мелкая бытовая техника
Жалюзи вертикальные
духовка
我不希望任何人知道西里尔字母顺序,但你仍然可以看到大写字母遍布各地,而дорога
和духовка
彼此并不相同。某种Python2& Unicode问题可能吗?
P.S。当我按ServicesForOffer.name.desc()
排序时,同样的怪异顺序被复制,当然也是如此。所以Postgres明显知道我没有。
答案 0 :(得分:2)
您可能没有正确设置collation,这对字符串的排序方式负责:
排序规则功能允许指定每列数据的排序顺序和字符分类行为,甚至是每次操作。这减轻了数据库的LC_COLLATE和LC_CTYPE设置在创建后无法更改的限制。
您可以通过简单地运行查询来尝试:
schema=> SELECT 'дорога' > 'духовка' COLLATE "en_US";
?column?
----------
f
(1 row)
使用以下命令在PostgreSQL shell中手动执行查询:
SELECT ...
FROM ...
WHERE ...
ORDER BY name COLLATE "your collation"
如果这对你有用,你可以altering columns collation:
ALTER [ COLUMN ] column [ SET DATA ] TYPE data_type [ COLLATE collation ]
[ USING expression ]
答案 1 :(得分:1)
我有MySQL排序的类似问题。解决方案是:
DEFAULT CHARACTER SET
设置为架构为'utf-8'(默认为latin-1)和DEFAULT COLLATE
设置为架构为'utf8_unicode_ci'。另一种方法是在数据库中创建正确的架构。