Проблема заказа акцентированных символов в PostgreSQL 8.4 - PullRequest
2 голосов
/ 28 июня 2011

Я создаю свою базу данных, используя fr_CA.UTF-8, например:

createdb --encoding=utf-8 --locale=fr_CA.UTF-8 --template=template0 someapp_development

Затем загружаю образцы данных, которые содержат символы с акцентом, в том числе «Étude de Me André Caron» и «Zellers inc.»,Во французском É следует сортировать / сопоставлять перед Z, и поэтому я ожидаю, что следующее утверждение:

SELECT fullname FROM addressees ORDER BY LOWER(fullname)

вернет É до Z, но, к сожалению, это не так:

# select fullname from addressees where party_id in (36, 618, 1264, 2481, 4473) order by lower(fullname);
                 fullname                  
-------------------------------------------
 VRV Express inc. [4473]
 Vêtements S.P. Apparels inc. (Les) [2481]
 Zellers inc. (Galeries Orford) [1264]
 Étude de Me André Caron [618]
 Étude de Me Richard Drapeau [36]

Обратите внимание, что VRV был раньше Vêtements.Должно быть, я что-то неправильно понял.Еще немного информации:

$ psql someapp_development
psql (8.4.4, server 8.4.3)

$ psql --list
                                          List of databases
           Name            |   Owner   | Encoding |  Collation  |    Ctype    |   Access privileges   
---------------------------+-----------+----------+-------------+-------------+-----------------------
 meetphil_development      | francois  | UTF8     | fr_CA.UTF-8 | fr_CA.UTF-8 | 

1 Ответ

2 голосов
/ 29 июня 2011

Мой вывод после некоторых тестов (Postgres 8.4.7 на Scientific Linux 6.0), скорее всего, это ошибка в локали системы fr_CA:

-bash-4.1$ psql
psql (8.4.7)
Saisissez « help » pour l'aide.

postgres=# show lc_collate ;
 lc_collate
------------
 fr_CA.utf8
(1 ligne)

postgres=# create table addressees (party_id serial primary key, fullname text);
NOTICE:  CREATE TABLE créera des séquences implicites « addressees_party_id_seq » pour la colonne serial « addressees.party_id »
NOTICE:  CREATE TABLE / PRIMARY KEY créera un index implicite « addressees_pkey » pour la table « addressees »
CREATE TABLE
postgres=# insert into addressees (fullname) values ('VRV Express inc. [4473]'),('Vêtements S.P. Apparels inc. (Les) [2481]'),('Zellers inc. (Galeries Orford) [1264]'), ('Étude de Me André Caron [618]'),('Étude de Me Richard Drapeau [36]');
INSERT 0 5
postgres=# select * from addressees order by lower(fullname);
 party_id |                 fullname
----------+-------------------------------------------
        4 | Étude de Me André Caron [618]
        5 | Étude de Me Richard Drapeau [36]
        2 | Vêtements S.P. Apparels inc. (Les) [2481]
        1 | VRV Express inc. [4473]
        3 | Zellers inc. (Galeries Orford) [1264]
(5 lignes)

postgres=#
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...