From: | Andreas Seltenreich <seltenreich(at)gmx(dot)de> |
---|---|
To: | "Goran V(dot)" <postmaschine(at)gmail(dot)com> |
Cc: | pgsql-de-allgemein-owner(at)postgresql(dot)org |
Subject: | Re: Probleme mit selbst definiertem ORDER BY |
Date: | 2005-06-08 18:37:53 |
Message-ID: | 871x7cofsu.fsf@gate450.dyndns.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-de-allgemein |
(bitte die Diskussion auf der Liste lassen)
Goran V. writes:
> Hi Andreas! Danke wieder für die schnelle Hilfe.
"wieder"? Ist AFAIK das erste mal :-)
>> Bis hier hin ist es ja genau die Sortierung, die bei einem
>>
>> initdb -E iso-8859-1 --locale=de_DE
>>
>> herauskommt.
>
> Warum ein initdb? Laut man-page benötige ich das doch nur für
> "geclusterte" Datenbanken?
Nein, für den "Datenbank-Cluster", ohne den gibt es keine Datenbanken.
Wenn du mit initdb keinen Cluster erstellt hast, hat das womöglich
Paketverwaltung oder der Windows-Installer für dich gemacht.
> Reicht nicht ein "createdb -E iso-8859-1"?
Nein. Entscheidend ist das Locale, genauer LC_COLLATE für die
Sortierung, und die wird beim Initialisieren des Clusters festgelegt.
Kommentar von Peter Eisentraut in pg_locale.c:
--8<---------------cut here---------------start------------->8---
* Here is how the locale stuff is handled: LC_COLLATE and LC_CTYPE
* are fixed by initdb, stored in pg_control, and cannot be changed.
* Thus, the effects of strcoll(), strxfrm(), isupper(), toupper(),
* etc. are always in the same fixed locale.
--8<---------------cut here---------------end--------------->8---
...wobei strcoll() für's ORDER BY verwendet wird.
> Nachdem ich so eine DB "timetable" erstellte zeigte mir ein "\l" folgendes:
>
> List of databases
> Name | Owner | Encoding
> -----------+----------+-----------
> template0 | postgres | SQL_ASCII
> template1 | postgres | SQL_ASCII
> timetable | db_admin | LATIN1
>
> So weit so gut. Dann habe ich die Datenbank bisschen gefüttert und ein
> "SELECT oid, * FROM station ORDER BY name_station ASC;"
>
> lieferte mir:
>
> oid | id_station | name_station
> -------+------------+--------------
> 17688 | 6 | AA
> 17690 | 8 | Aa
> 17685 | 3 | C C
> 17684 | 2 | C-C
> 17683 | 1 | CC
> 17686 | 4 | C_C
> 17689 | 7 | aA
> 17687 | 5 | aa
> 17693 | 11 | Ü a
> 17692 | 10 | äA
> 17691 | 9 | ää
> (11 rows)
>
> Nichts zu sehen von einer passenden Sortierung. Mmh, mache ich alles
> falsch?
Das encoding alleine genügt nicht, wie oben schon geschrieben, muß das
Locale passend gesetzt sein:
--8<---------------cut here---------------start------------->8---
scratch=# show lc_collate;
lc_collate
------------
de_DE
(1 row)
scratch=# select w from foo order by w;
w
---
_
-
a
A
ä
Ä
o
O
ö
Ö
ß
u
U
ü
Ü
(16 rows)
--8<---------------cut here---------------end--------------->8---
Gruß
Andreas
From | Date | Subject | |
---|---|---|---|
Next Message | Manfred Rebentisch | 2005-06-10 15:19:47 | Reicht PQclear nach einem Error? |
Previous Message | Andreas Seltenreich | 2005-06-08 17:15:10 | Re: Probleme mit selbst definiertem ORDER BY |