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. CHAR
s, VARCHARS
s, INTEGER
s, DATES
s, etc. together.
Tatsächlich benötigen VARCHAR
-Spalten mehr Speicherplatz als CHAR
-Spalten, da bei der Speicherng eines VARCHAR
s, 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 CHAR
s, 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 VARCHAR
s
NCHAR
and NVARCHAR
zurück zum Seitenanfang
<< Unique (eindeutiges) Feld | IBExpert Glossar | View >>