CHAR und VARCHAR

<< Unique (eindeutiges) Feld | IBExpert Glossar | View >>

CHAR und VARCHAR

Firebird/InterBase® bietet zwei Basis-Datentypen an, um Text- oder Zeicheninformationen zu speichern: CHAR und VARCHAR (Blobs erlauben auch die Speicherung von Zeichen mi Hilfe von Subtype-Text).

CHAR und VARCHAR sind Datentypen, die jede beliebige Textinformation speichern können. Zahlen die nicht berechnet werden, wie Postleitzahlen, werden traditionell in CHAR oder VARCHAR-Spalten gespeichert. Die Länge ist als ein Parameter definiert und kann zwischen 1 und 32.767 Bytes liegen. Es ist besonders nützlich für Codes, die typischerweise eine feste oder vordefinierte Länge haben, wie die Postleitzahl für eine Stadt.

Verglichen mit den meisten anderen Datenbanken, speichert Firebird/InterBase® nur signifikante Daten. Wenn eine Spalte als CHAR(100) definiert ist, aber nur Einträge mit 10 Zeichen enthält, werden die zusätzlich definierten Zeichen nicht genutzt, da Firebird/InterBase® CHAR und VARCHAR Typen gleich speichert und nicht ungenutzten Platz mit Leerzeichen füllt. Sowohl CHAR als auch VARCHAR werden in Speicherpuffern in ihrer vollen, deklarierten Länge gespeichert; aber die gesamte Zeile wird vor der Speicherung komprimiert, d.h. CHARs, VARCHARSs, INTEGERs, DATESs, etc. together.

Tatsächlich benötigen VARCHAR-Spalten mehr Speicherplatz als CHAR-Spalten, da bei der Speicherng eines VARCHARs, Firebird/InterBase® zwei Bytes hinzufügt, die anzeigen, wie groß der VARCHAR tatsächlich ist.

ALso wird ein CHAR tatsächlich mit weniger Paltzbedarf gespeichert. Wenn jedoch ein SELECT auf einer VARCHAR-Spalte erfolgt,schneidet Firebird/InterBase® das 2-Byte-Polster ab und speichert den Wert. Wenn ein SELECT auf eine CHAR-Spalte erfolgt, gibt Firebird/InterBase® den Wert und die "Leerzeichen" zurück. Also muss die Speicherung der zwei Bytes in einem CHAR gegen die nachträgliche Entfernung der Leerzeichen auf der Clientseite abgewogen werden. Diese beiden Bytes sind jedoch bei der heutigen Hardware so vernachlässigbar, dass sie keinen Einfluss auf die Datenbankleistung haben. Dies kann jedoch nachteilig bei der Definition von kurzen Textfeldern sein.

In der Praxis sollten Sie eine Regel beachten: verwenden Sie nur CHARs, wenn Strings mit wenigen Zeichen gespeichert werden sollen; die Ausnahme der Regel ist, wenn Sie mit Zwischentabellen arbeiten, die für den Datenexport von prn-Dateien mit festen Längen benötigt werden. Dann sind Felder mit festen Längen von Vorteil.

Diese effiziente Speicherung in Firebird/InterBase® kann für erhebliche Verwirrung sorgen, gerade beim Importieren von Daten, da Paradox oder dBASE Datenbanken alle Leerzeichen speichern und nach dem Import einer 10 MB dBASE-Datei nach InterBase®, oft nur 3.6 MB übrig bleiben, obwohl alle Datensätze korrekt importiert wurden.

Aus diesem Grund können Spalten in Firebird/InterBase® ohne Probleme großzügig definiert werden, wohingegen in anderen Datenbanken jedes definierte Byte die Größe der Datenbank beeinflusst, egal ob Daten in diesen Feldern gespeichert sind oder nicht.

Bitte beachten Sie jedoch, dass indizierte CHAR-Felder nicht mehr als ca. 80 Zeichen Länge haben sollten (in Firebird 1.5 ist das Limit etwas höher).

Die CHAR-Datentyp-Definition kann hat zwei Schreibweisen:

 CHAR  
 CHARACTER

Die VARCHAR-Datentyp-Definition kann wie folgt geschrieben werden:

 VARCHAR
 CHARACTER VARYING
 CHAR VARYING

Siehe auch:
deutschsprachig:
Tabelleneditor
SQL Editor
englischsprachig:
Selecting the right data type to improve database performance
Firebird 2.1 Language Reference Update
Firebird 2.0 Language Reference Update
SQL Language Reference
Data types and subtypes
The Firebird server and VARCHARs NCHAR and NVARCHAR

zurück zum Seitenanfang
<< Unique (eindeutiges) Feld | IBExpert Glossar | View >>