Einzelnen Beitrag anzeigen

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