Einzelnen Beitrag anzeigen

dust258

Registriert seit: 18. Aug 2008
62 Beiträge
 
#1

Firebird 1.5: key size too big for index

  Alt 1. Jun 2010, 11:52
Datenbank: Firebird • Version: 1.5 • Zugriff über: IbExpert
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
  Mit Zitat antworten Zitat