Hallo Leute,
ich habe ein Tool mit dem ich Tabellen in einer bestehenden Datenbank anlege.
z.B.
CREATE TABLE TESTTABELLE(
ID INTEGER NOT NULL,
DBID INTEGER NOT NULL,
TEXT VARCHAR(240),
PRIMARY KEY (ID,DBID))
CREATE INDEX TESTINDEX ON TESTTABELLE (TEXT)
Jetzt habe ich schon öfter den Fehler "key size too big for index" bekommen.
Der Fehler tritt nur bei Firebird 1.5 auf. Das hängt wohl damit zusammen das ab 2.1 die Begrenzung von 252 bytes pro Index aufgehoben wurde (bzw. auf 1/4 des Pagesize gesetzt wurde).
Ich vermute den Fehler also in der Charset/Collection. Die meisten Datenbanken haben ein WIN1252 Charset. Da dies Singelbyte ist sollte es doch IMO immer möglich sein Felder bis zu einer Länge von 252 Länge zu indizieren (das war meine 1. Frage
).
Also kann dieser Fehler nur Auftreten wenn das Charset Multibyte ist (z.B. UNICODE_FSS) und dadurch mehr Bytes benötigt. Also liegt die Maximale größe eines Indizierbaren Feldes UNICODE_FSS bei 84 Zeichen (da bis zu 3 Bytes für ein Zeichen benötigt werden). Oder gibt es Situationen in denen es höher sein kann? (Frage Nr2.)
Und wenn das alles so Stimmt: Wie verhält es sich mit Firebird 2.1? Benötigt ein Feld mit dem Charset UNICODE_FSS hier ebenfalls 3 Bytes pro Zeichen?
Ich war schon auf ewig vielen Seiten und ich hoffe das kann mir Jemand so bestätigen, bzw. mich berichtigen...
Ein paar Quellen:
Ein Indexberechner:
http://www.volny.cz/iprenosil/interb...calculator.htm
Charsets und Collations in Firebird:
http://ibexpert.net/IBE/INDEX.PHP?n=...ollationOrders
Firebird 1.5 Charsets:
http://www.firebirdsql.org/index.php...b_1_5_charsets