FirebirdSQL logo

CREATE COLLATION

Verwendet für

Erstellen einer neuen Kollatierung für einen unterstützten Zeichensatz, der für die Datenbank verfügbar ist

Verfügbar in

DSQL

Syntax
CREATE COLLATION collname
    FOR charset
    [FROM {basecoll | EXTERNAL ('extname')}]
    [NO PAD | PAD SPACE]
    [CASE [IN]SENSITIVE]
    [ACCENT [IN]SENSITIVE]
    ['<specific-attributes>']

<specific-attributes> ::= <attribute> [; <attribute> ...]

<attribute> ::= attrname=attrvalue
Table 1. CREATE COLLATION-Anweisungsparameter
Parameter Beschreibung

collname

Der für die neue Sortierung zu verwendende Name.Die maximale Länge beträgt 63 Zeichen

charset

Ein in der Datenbank vorhandener Zeichensatz

basecoll

Eine Kollation, die bereits in der Datenbank vorhanden ist

extname

Der in der Datei .conf verwendete Kollatierungsname

Die CREATE COLLATION-Anweisung “erzeugt” nichts, ihr Zweck besteht darin, einer Datenbank eine Kollation bekannt zu machen.Die Kollatierung muss bereits auf dem System vorhanden sein, normalerweise in einer Bibliotheksdatei, und muss ordnungsgemäß in einer .conf-Datei im intl-Unterverzeichnis der Firebird-Installation registriert sein.

Die Kollation kann alternativ auf einer basieren, die bereits in der Datenbank vorhanden ist.

Wie die Engine die Kollation erkennt

Die optionale FROM'-Klausel gibt die Basiskollation an, die verwendet wird, um eine neue Kollation abzuleiten.Diese Kollation muss bereits in der Datenbank vorhanden sein.Wenn das Schlüsselwort `EXTERNAL angegeben wird, scannt Firebird die .conf-Dateien in $fbroot/intl/, wobei extname genau mit dem Namen in der Konfigurationsdatei übereinstimmen muss (Groß-/Kleinschreibung beachten).

Wenn keine FROM-Klausel vorhanden ist, durchsucht Firebird die .conf-Datei(en) im intl-Unterverzeichnis nach einer Kollatierung mit dem in CREATE COLLATION angegebenen Kollatierungsnamen.Mit anderen Worten, das Weglassen der FROM basecoll-Klausel entspricht der Angabe von FROM EXTERNAL ('collname').

Beim — in einfachen Anführungszeichen angegebenen — extname muss die Groß-/Kleinschreibung beachtet werden und genau mit dem Kollatierungsnamen in der Datei .conf übereinstimmen.Bei den Parametern collname, charset und basecoll wird die Groß-/Kleinschreibung nicht beachtet, es sei denn, sie stehen in doppelten Anführungszeichen.

Beim Erstellen einer Sortierung können Sie angeben, ob nachgestellte Leerzeichen in den Vergleich einbezogen werden.Bei Angabe der NO PAD-Klausel werden abschließende Leerzeichen beim Vergleich berücksichtigt.Wenn die PAD SPACE-Klausel angegeben ist, werden nachgestellte Leerzeichen beim Vergleich ignoriert.

Mit der optionalen CASE-Klausel können Sie angeben, ob beim Vergleich die Groß-/Kleinschreibung beachtet wird oder nicht.

Mit der optionalen ACCENT-Klausel können Sie angeben, ob der Vergleich akzentsensitiv oder akzentunabhängig ist (zB wenn ‘'e'’ und ‘'é'’ als gleich betrachtet werden oder ungleich).

docnext count = 6

Spezifische Attribute

Die CREATE COLLATION-Anweisung kann auch spezielle Attribute enthalten, um die Kollatierung zu konfigurieren.Die verfügbaren spezifischen Attribute sind in der folgenden Tabelle aufgeführt.Nicht alle spezifischen Attribute gelten für jede Sortierung.Wenn das Attribut nicht auf die Sortierung anwendbar ist, aber beim Erstellen angegeben wird, wird kein Fehler verursacht.

Important

Bei spezifische Attributnamen muss die Groß-/Kleinschreibung beachtet werden.

In der Tabelle gibt “1 bpc” an, dass ein Attribut für Kollationen von Zeichensätzen mit 1 Byte pro Zeichen gültig ist (sogenannte schmale Zeichensätze), und “UNI” für “Unicode Collations”.

Table 1. Spezifische Sortierattribute
Atrribute Werte Gültig für Hinweis

DISABLE-COMPRESSIONS

0, 1

1 bpc, UNI(4.0.1+)

Deaktiviert Kompressionen (auch bekannt als Kontraktionen).Kompressionen bewirken, dass bestimmte Zeichenfolgen als atomare Einheiten sortiert werden, z.B. Spanisch c+h als einzelnes Zeichen ch

DISABLE-EXPANSIONS

0, 1

1 bpc

Deaktiviert Erweiterungen.Erweiterungen bewirken, dass bestimmte Zeichen (z.B. Ligaturen oder umlaute Vokale) als Zeichenfolgen behandelt und entsprechend sortiert werden

ICU-VERSION

Standard oder M.m

UNI

Gibt die zu verwendende ICU-Bibliotheksversion an.Gültige Werte sind diejenigen, die im entsprechenden <intl_module>-Element in intl/fbintl.conf definiert sind.Format: entweder das Stringliteral “default” oder eine Major+Minor Versionsnummer wie “3.0” (beide ohne Anführungszeichen).

LOCALE

xx_YY

UNI

Gibt das Kollatierungsgebietsschema an.Erfordert eine vollständige Version der ICU-Bibliotheken.Format: ein Gebietsschema-String wie “du_NL” (ohne Anführungszeichen)

Seit Firebird 4.0.1 unterstützt diese Option auch ICU-Locale-Keywords und -Attribute.

MULTI-LEVEL

0, 1

1 bpc

Verwendet mehr als eine Sortierebene

NUMERIC-SORT

0, 1

UNI

Behandelt zusammenhängende Gruppen von Dezimalziffern in der Zeichenfolge als atomare Einheiten und sortiert sie numerisch.(Dies wird auch als natürliche Sortierung bezeichnet)

SPECIALS-FIRST

0, 1

1 bpc

Ordnet Sonderzeichen (Leerzeichen, Symbole usw.) vor alphanumerischen Zeichen an

Tip

Wenn Sie Ihrer Datenbank einen neuen Zeichensatz mit seiner Standardsortierung hinzufügen möchten, deklarieren Sie die gespeicherte Prozedur sp_register_character_set(name, max_bytes_per_character), die sich in misc/intl.sql im Firebird-Installationsverzeichnis befindet, und führen Sie sie aus.

Damit dies funktioniert, muss der Zeichensatz auf dem System vorhanden und in einer .conf-Datei im intl-Unterverzeichnis registriert sein.

Wer kann eine Kollation erstellen

Die CREATE COLLATION-Anweisung kann ausgeführt werden durch:

Der Benutzer, der die CREATE COLLATION-Anweisung ausführt, wird Eigentümer der Kollation.

Beispiele zur Nutzung von CREATE COLLATION

  1. Erstellen einer Kollatierung mit dem Namen aus der Datei fbintl.conf (Groß-/Kleinschreibung beachten)

    CREATE COLLATION ISO8859_1_UNICODE FOR ISO8859_1;
  2. Erstellen einer Kollatierung unter Verwendung eines speziellen (benutzerdefinierten) Namens (der “externe” Name muss vollständig mit dem Namen in der Datei fbintl.conf übereinstimmen)

    CREATE COLLATION LAT_UNI
      FOR ISO8859_1
      FROM EXTERNAL ('ISO8859_1_UNICODE');
  3. Erstellen einer Sortierung ohne Beachtung der Groß-/Kleinschreibung basierend auf einer bereits in der Datenbank vorhandenen.

    CREATE COLLATION ES_ES_NOPAD_CI
      FOR ISO8859_1
      FROM ES_ES
      NO PAD
      CASE INSENSITIVE;
  4. Erstellen einer Sortierung ohne Beachtung der Groß-/Kleinschreibung basierend auf einer bereits in der Datenbank vorhandenen Sortierung mit bestimmten Attributen

    CREATE COLLATION ES_ES_CI_COMPR
      FOR ISO8859_1
      FROM ES_ES
      CASE INSENSITIVE
      'DISABLE-COMPRESSIONS=0';
  5. Erstellen einer Sortierung ohne Beachtung der Groß-/Kleinschreibung nach dem Wert von Zahlen (die sogenannte natürliche Sortierung)

    CREATE COLLATION nums_coll FOR UTF8
      FROM UNICODE
      CASE INSENSITIVE 'NUMERIC-SORT=1';
    
    CREATE DOMAIN dm_nums AS varchar(20)
      CHARACTER SET UTF8 COLLATE nums_coll; -- Original-(Hersteller-)Nummern
    
    CREATE TABLE wares(id int primary key, articul dm_nums ...);

DROP COLLATION

Verwendet für

Eine Kollation aus der Datenbank entfernen

Verfügbar in

DSQL

Syntax
DROP COLLATION collname
Table 1. DROP COLLATION-Anweisungsparameter
Parameter Beschreibung

collname

Der Name der Kollation

Die Anweisung DROP COLLATION entfernt die angegebene Kollatierung aus der Datenbank, falls vorhanden.Wenn die angegebene Sortierung nicht vorhanden ist, wird ein Fehler ausgegeben.

Tip

Wenn Sie einen ganzen Zeichensatz mit all seinen Kollatierungen aus der Datenbank entfernen möchten, deklarieren Sie die gespeicherte Prozedur sp_unregister_character_set(name) aus dem misc/intl.sql-Unterverzeichnis der Firebird-Installation und führen Sie sie aus.

Wer kann eine Kollation abgeben

Die Drop COLLATION-Anweisung kann ausgeführt werden durch:

  • Administratoren

  • Der Besitzer der Kollation

  • Benutzer mit dem Privileg DROP ANY COLLATION

Beispiele für DROP COLLATION

Löschen der Kollatierung ES_ES_NOPAD_CI.
DROP COLLATION ES_ES_NOPAD_CI;