AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Firebird Sortierfolge deutsch mit UTF8 + Unicode Collation
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird Sortierfolge deutsch mit UTF8 + Unicode Collation

Ein Thema von Perlsau · begonnen am 23. Nov 2012 · letzter Beitrag vom 28. Nov 2012
Antwort Antwort
Perlsau
(Gast)

n/a Beiträge
 
#1

Firebird Sortierfolge deutsch mit UTF8 + Unicode Collation

  Alt 23. Nov 2012, 18:25
Datenbank: Firebird • Version: 2.5.2 • Zugriff über: FibPlus
Moin allerseits,

habe nun endlich herausbekommen, wie ich es fertigbringe, Felder Firebird-Datenbank, die mit UTF8 codiert sind, in deutscher Sortierung anzeigen zu lassen. Bei herkömmlicher Verwendung sortiert Firebird die VARCHAR-Daten so: Zuerst kommen die Großbuchstaben, hinter dem Z kommen die Umlaute, dann kommen die Kleinbuchstaben und hinter dem z wiederum die Umlaute. Ich wollte aber, daß bei der Sortierung erstens nicht zwischen Groß- und Kleinschreibung unterschieden wird, was aber erstmal nichts mit der aktuellen Collation zu tun hat. Zweitens wollte ich erreichen, daß die Umlaute nicht am Ende erscheinen, sondern integriert werden: Ä bzw. ä kommt nach A bzw. a usw. So wie ich das sehe, werden die Umlaute nun als Ae bzw. ae usw. behandelt und entsprechend sortiert.

Vorgehensweise

Man lade sich zuerst einmal die International Components for Unicode herunter, die für Firebird aus drei DLLs bestehen:
icudt30.dll
icuin30.dll
icuuc30.dll

Bei Firebird liegen diese drei Datein im Ordner bin. Man sieht an der Zahl, daß es sich um die Version 3.0 handelt, die Firebird standardmäßig beiligt. Wir sind aber bereits bei Version 5.0. Die neuen DLLs für Windows sind für 32-bit-Server in der ZIP-Datei icu4c-50_1-Win32-msvc10.zip enthalten, für 64-bit-Server in der ZIP-Datei icu4c-50_1-Win64-msvc10.zip. Für andere OS finden sich auf der Downloadsite entsprechende Releases.

Installation

Hat man sich nun beispielsweise die icu4c-50_1-Win32-msvc10.zip heruntergeladen und entpackt, findet man im Ordner bin die Entsprechungen zu den oben aufgeführten DLLs:
icudt50.dll
icuin50.dll
icuuc50.dll

1. Gehe in der Windwos-Computerverwaltung auf Dienste und deaktiviere den Firebird-Dienst.
2. Sichere die drei 30er-DLLs und lösche sie aus dem BIN-Ordner deiner Firebird-Installation.
3. Kopiere die drei neuen 50er-DLLs in den BIN-Ordner deiner Firebird-Installation.
4. Begebe dich in den Ordner INTL deiner Firebird-Installation.
5. Öffne dort die Datei fbintl.conf mit einem einfachen Text-Editor (z.B. Notepad).
6. In den ersten drei Zeilen findet sich folgender Eintrag:

Code:
<intl_module builtin>
   icu_versions   default
</intl_module>
Setze nun den Cursor direkt vor den Eintrag default und tippe dort ein: 5.0 gefolgt von einem Leerzeichen. Jetzt sollte in dieser zweiten Zeile folgendes stehen:
Code:
   icu_versions   5.0 default
7. Nun startest du unter Dienste deinen Firebird-Server wieder.

Nun sollten die Umlaute richtig sortiert werden. Um auch die Groß-Kleinschreibung in die Sortierung einzubeziehen, gibst du in deinem SELECT-Befehl, wo du die Sortierung (z.B. nach de VARCHAR-Feld WORT) festlegst, :

Code:
Select * FROM TABELLE
ORDER BY UPPER(WORT);
Bei mir hat das genau so funktioniert ...
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#2

AW: Firebird Sortierfolge deutsch mit UTF8 + Unicode Collation

  Alt 27. Nov 2012, 18:57
Sollte für das Feld WORT eine entsprechende Collation verwendet worden sein, dann sollte dieser zusätzliche Schnick-Schnack eigentlich nicht notwendig sein. Aber vielleicht hab ich auf die Schnelle auch einfach etwas überlesen.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

AW: Firebird Sortierfolge deutsch mit UTF8 + Unicode Collation

  Alt 27. Nov 2012, 20:13
Ich vermeide solche Sortierungsprobleme, indem ich die Komponente die Einträge sortieren lasse. Das hat bis jetzt immer sehr gut funktioniert, man siehe Code-Orakel.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#4

AW: Firebird Sortierfolge deutsch mit UTF8 + Unicode Collation

  Alt 28. Nov 2012, 05:49
Sollte für das Feld WORT eine entsprechende Collation verwendet worden sein, dann sollte dieser zusätzliche Schnick-Schnack eigentlich nicht notwendig sein. Aber vielleicht hab ich auf die Schnelle auch einfach etwas überlesen.
Was ist "eine entsprechende Collation"? In Firebird habe ich, wenn ich UTF8 als Zeichensatz wähle, 5 Collations zur Auswahl:

1. UCS_BASIC
2. UNICODE
3. UNICODE_CI
4. UNICODE_CI_AI
5. UTF8

Mit keiner dieser Collations wurden die Inhalte so sortiert, wie es in Deutschland üblich ist, sondern fehlerhaft wie oben beschrieben. Nachdem ich meinen "zusätzlichen Schnick-Schnack" absolviert hatte, ist die Sortierung genau wie gewünscht. Mit anderen Worten also: Welche Collation sollte das deiner Meinung nach leisten? Soweit ich das verstanden hatte, sind bei Firebird von Haus aus keine deutschen UTF8-Collations im Release dabei. Deshalb hab ich ziemlich lange herumgesucht und gelesen und gelesen, bis mir fast die Augen zufielen, und irgendwann endlich diese Lösung gefunden, die auch erst nach langem Herumprobieren geklappt hat. Ich hätte das also einfacher haben können? Wie?
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: Firebird Sortierfolge deutsch mit UTF8 + Unicode Collation

  Alt 28. Nov 2012, 05:57
Ich vermeide solche Sortierungsprobleme, indem ich die Komponente die Einträge sortieren lasse. Das hat bis jetzt immer sehr gut funktioniert, man siehe Code-Orakel.
Auch bei mir sortiert die Komponente die Einträge (via FibPlus mit dem Befehl dataset.dosort oder via Select-Befehls-Zusatz ORDER BY), aber leider nicht in der gewünschten Reihenfolge – zumindest nicht, bis ich meinen "zusätzlichen Schnick-Schnack" eingebaut hatte. Verwendest du im Code-Orakel-Programm denn UTF8-Codierung? Soweit ich das sehe, hast du in allen VarChar-Feldern deiner Code-Orakel.fdb als Zeichensatz NONE eingetragen ...
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#6

AW: Firebird Sortierfolge deutsch mit UTF8 + Unicode Collation

  Alt 28. Nov 2012, 07:10
Auch bei mir sortiert die Komponente die Einträge (via FibPlus mit dem Befehl dataset.dosort oder via Select-Befehls-Zusatz ORDER BY), aber leider nicht in der gewünschten Reihenfolge – zumindest nicht, bis ich meinen "zusätzlichen Schnick-Schnack" eingebaut hatte. Verwendest du im Code-Orakel-Programm denn UTF8-Codierung? Soweit ich das sehe, hast du in allen VarChar-Feldern deiner Code-Orakel.fdb als Zeichensatz NONE eingetragen ...
Du hast recht, ich benutze keine Collation, habe aber in der Datenbankkomponente das UTF8 eingeschaltet. Wenn ich das ausschalte, werden zum Beispiel äöüß nicht richtig dargestellt. Wenn ich das ganze dann richtig verstehe, übernimmt die Datenbankkomponente dann die Aufgabe das Speichern und Auslesen entsprechend mit UTF8. Ich verwende die UniDAC's von DevArt.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#7

AW: Firebird Sortierfolge deutsch mit UTF8 + Unicode Collation

  Alt 28. Nov 2012, 11:42
Folgende Abfrage (Feld VC40 wurde mit UTF8 und Collation Unicode in einer Firebird 2.5.1 DB angelegt):
Code:
select * from t4 order by VC40
Gibt mir folgende sortierte Reihenfolge:

Code:
T4_ID     VC40                                   
---------------------------------------------------
1          a                                      
2          A                                      
7          ä                                       
10         Ä                                       
13         Adler                                  
14         ameise                                
15         Äther                                  
4          b                                      
3          B                                      
8          ö                                       
11         Ö                                       
5          t                                      
6          T                                      
9          ü                                       
12         Ü
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 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