Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird Sortierung Umlaute (https://www.delphipraxis.net/189702-firebird-sortierung-umlaute.html)

Lemmy 12. Jul 2016 06:44

Datenbank: Firebird • Version: 2.1 • Zugriff über: Umlaute

Firebird Sortierung Umlaute
 
Hallo zusammen,

wenn ich eine FirebirdDB her nehmen und per ISO8859_1 collate de_de einrichte und dann ein

Code:
Select Name from Kunde order by 1
mache, werden die Umlaute anscheinen nach DIN 5007 Var1 (ä=a) sortiert:


Baumgartner
Bäumel
Baumüller


Gibt es eine Möglichkeit nach DIN 5007 Var2 zu sortieren (ä=ae)? Oder ist das dann nur clientseitig möglich?

Grüße

mkinzler 12. Jul 2016 07:47

AW: Firebird Sortierung Umlaute
 
Oder eine andere Collation einstellen bzw. einrichten.

Neutral General 12. Jul 2016 07:52

AW: Firebird Sortierung Umlaute
 
Oder (wenn auch etwas umständlich):

PHP-Quellcode:
Select
  Name
from Kunde
order by replace(replace(replace(Name, 'ä', 'ae'), 'Ä', 'Ae'), 'ö', 'oe') -- usw

DeddyH 12. Jul 2016 08:03

AW: Firebird Sortierung Umlaute
 
Ich bin nicht ganz sicher, aber evtl. gibt es auch bei Firebird das COLLATE in der ORDER BY-Klausel.

Lemmy 12. Jul 2016 14:24

AW: Firebird Sortierung Umlaute
 
Zitat:

Zitat von mkinzler (Beitrag 1342407)
Oder eine andere Collation einstellen bzw. einrichten.

Hast Du da irgend einen Tipp für mich? Anscheinend klappt es mit CharSet UTF8 und Collation Unicode - aber für ISO8859_1 habe ich bisher keine andere collation gefunden die funktioniert.

mkinzler 12. Jul 2016 14:47

AW: Firebird Sortierung Umlaute
 
Vielleicht hilft das

SQL-Code:
create collation ISO8859_1_UNICODE for ISO8859_1;
http://firebirdsql.org/refdocs/langr...ollations.html

Lemmy 12. Jul 2016 15:03

AW: Firebird Sortierung Umlaute
 
nope, Sortierung bleib bei lexikalischer Sortierung (ä=a) und nicht wie gewünscht Telefonliste (ä=ae)

himitsu 12. Jul 2016 15:08

AW: Firebird Sortierung Umlaute
 
Jo, kann man auch im ORDER BY angeben.

http://www.destructor.de/firebird/charsets.htm
http://firebirdsql.org/refdocs/langr...ollations.html

Die Collation gibt an, unter welchen sprachlichen Regeln die Sortierung und Indizierung vorgenommen werden,
also wie der Stringverleich arbeitet, denn je nach Sprache gibt es da Unterschiede.

Das betrifft nicht nur die Buchstaben und Sonderzeichen, sondern auch die Groß-/Kleinschreibung.

Lemmy 12. Jul 2016 15:31

AW: Firebird Sortierung Umlaute
 
Zitat:

Zitat von himitsu (Beitrag 1342489)
Die Collation gibt an, unter welchen sprachlichen Regeln die Sortierung und Indizierung vorgenommen werden,
also wie der Stringverleich arbeitet, denn je nach Sprache gibt es da Unterschiede.

und wie genau hilft mir das weiter, wenn die default-Einstellung der Datenbank de_de lautet, es keine andere Einstellung für Deutschland gibt und ich mit der Sortierreihenfolge von de_de nicht einverstanden bin? ;-)

Und um alle Klarheiten zu beseitigen:

Code:
 Select Name from Kunde order by 1 collate de_de
bringt genau das gleiche "falsche" Ergebnis - jetzt sogar mit einer eigenen Sortierspalte:



BachBach
BachlBachl
BächleinBaechlein
BachmannBachmann



Und nein, eine Sortierspalte ist nicht wirklich hilfreich, da es nicht nur eine Tabelle betrifft....

Grüße

himitsu 12. Jul 2016 15:33

AW: Firebird Sortierung Umlaute
 
Zitat:

Zitat von Lemmy (Beitrag 1342487)
nope, Sortierung bleib bei lexikalischer Sortierung (ä=a) und nicht wie gewünscht Telefonliste (ä=ae)

Da fehlt das FROM und dort eine Collation angeben, welche wie gewünscht sortiert.
Oder die ATTRIBUTE mit der passenden LOCALE.

http://firebirdsql.org/refdocs/langr...llation-create

Wieso eine Sortierspalte?
ORDER BY mit "passendem" COLLATE und schon wird die originale Spalte anders sortiert, als es die COLLATION der Spalte (in der Tabelle) definiert hat.

Lemmy 12. Jul 2016 15:41

AW: Firebird Sortierung Umlaute
 
Zitat:

Zitat von himitsu (Beitrag 1342498)
Zitat:

Zitat von Lemmy (Beitrag 1342487)
nope, Sortierung bleib bei lexikalischer Sortierung (ä=a) und nicht wie gewünscht Telefonliste (ä=ae)

das fehlt das FROM


wo? Bei mKinzlers code? nein da fehlt nix:

Zitat:

Examples:

Simplest form, using the name as found in the .conf file (case-insensitive):

create collation iso8859_1_unicode for iso8859_1
aber ich habe auch die Langform schon probiert...

Code:
create collation lat_uni
  for iso8859_1
  from external ('ISO8859_1_UNICODE')
Zitat:

Zitat von himitsu (Beitrag 1342498)
und dort eine Callation angeben, welche wie gewünscht sortiert.

ich weiß nicht.. liegt vermutlich an mir, aber ich dachte, dass sich die Diskussion aktuell genau um den Punkt dreht.. Welche soll ich denn angeben damit das funktioniert?

mkinzler 12. Jul 2016 15:48

AW: Firebird Sortierung Umlaute
 
Liste der Anhänge anzeigen (Anzahl: 1)
Möglicherweise könnte das Helfen

DISABLE-EXPANSIONS

himitsu 12. Jul 2016 15:51

AW: Firebird Sortierung Umlaute
 
Es kann natürlich auch sein, dass Firebird "vorinstalliert" nur die DIN 5007 Variante 1 dabei hat.
de_DE scheint jedenfalls Variante 1 zu sein und sonst fand ich in der Liste nichts Anderes.
Da müsstest du dann wohl diese Sortierung von EXTERN laden.
Oder du nimmst eine andere Sprache, welche auch Ä kennt und nach Ä=AE sortiert, aber k.A. was und ob es das gibt.

Im Notfall mal direkt an die Firebird-Leute wenden.

Oder notfalls
Delphi-Quellcode:
ORDER BY ErsetzeÄdurchAE(DeineSpalte)
.



Blos, falls jemand die Problematik nicht kennt und sich informieren will, worum es geht: https://de.wikipedia.org/wiki/Alphabetische_Sortierung

Lemmy 12. Jul 2016 16:32

AW: Firebird Sortierung Umlaute
 
Zitat:

Zitat von mkinzler (Beitrag 1342505)
Möglicherweise könnte das Helfen

DISABLE-EXPANSIONS

nope, gilt nur für 1 byte per character und ein

Code:
create collation de_de0
  for iso8859_1
  from de_de
  'DISABLE-EXPANSIONS=0'
oder

Code:
create collation de_de1
  for iso8859_1
  from de_de
  'DISABLE-EXPANSIONS=1'

zeigt keine Wirkung (d.h. immer noch ä=a) und

Code:
create collation iso8859_1_unicode for iso8859_1
'DISABLE-EXPANSIONS=1'
geht nicht wegen der 1bpc Beschränkung.


Zitat:

Zitat von himitsu (Beitrag 1342507)
Da müsstest du dann wohl diese Sortierung von EXTERN laden.


genau dazu habe ich keine Info gefunden. Es wird zwar beschrieben, dass ich die Sortierung per library bereit stellen kann, aber welche Methoden exportiert werden müssen habe ich nicht gefunden.

Auf der anderen Seite scheint es mit dem Characterset Unicode ja zu funktionieren. Vielleicht ist das langfristig eh die bessere Variante nach dem Umstieg auf ein Unicode-Delphi auch die Datenbank umzustellen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz