Announcement

Collapse
No announcement yet.

Fehlermeldung: key size too big for index

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fehlermeldung: key size too big for index

    Hallo zusammen,

    ich arbeite mit IB 6.01 und der IBConsole 1.0.0.334.
    Bei folgender Eingabe bekomme ich einen Fehler:

    Create Domain Name_TYPE
    AS VARCHAR(50) COLLATE DE_DE;

    CREATE TABLE Kunden(
    Vorname Name_TYPE,
    Name Name_TYPE);

    CREATE ASCENDING INDEX NameVorname ON Kunden (Name, Vorname);

    Fehlermeldung:
    Unsuccessful metadata update
    key size too big for index NAMEVORNAME
    Statement: CREATE ASCENDING INDEX NameVorname ON Kunden (Name, Vorname)

    Was bedeutet diese Fehlermeldung?
    Wenn man in der Definition der Domain 'VARCHAR(30)'
    angibt, verschwindet der Fehler. Ebenso, wenn
    man 'VARCHAR(50)' ohne 'COLLATE DE_DE' angibt.
    Was hat denn die Sortierreihenfolge damit zu tun?

    Danke
    Klaus

  • #2
    Hallo,

    leider sitzt man auch beim InterBase 6 immer dann nur in der zweiten Reihe, wenn die Datenbank oder eine Tabellenspalte einen eigenen Zeichensatz bzw. eine eigene Sortierreihenfolge verwendet.

    Sobald <b>nicht</b> der Zeichensatz NONE verwendet wird, verwendet der InterBase 2 Byte pro Zeichen, wobei eine andere Sortierreihenfolge dazu führen kann, dass der InterBase intern bis zu 3 Byte pro Zeichen benötigt. Da auch die maximale Länge eines Index-Eintrags beschränkt ist (siehe <i>http://www.interbase.com/kbase/ib_0245.html</i>), verschärft sich die Situation immer dann, wenn man einen zusammengesetzten Index aufbauen will.

    Für den Fall, das der o.g. Link nicht mehr gültig ist, füge ich die Kurzberechnung bei:

    <b>Max. index key size:</b><br>
    <i>Start at 256 bytes for a single-column key, and 200 for multi-column keys. Subtract four bytes per column.<br>
    For example: a single-column CHAR key can be up to 256 - 4 = 252 bytes; a three-column key must add up to 200 - 12 = 188 bytes.<br>
    Note that multi-byte character sets must fit within the key by counting bytes, not by counting characters. For example, a single-column key using 3-byte UNICODE_FSS characters can have a maximum of (256 - 4) / 3 = 84 characters.</i>

    &#10

    Comment


    • #3
      Hallo Herr Kosch,

      vielen Dank für Ihre Antwort.

      Ich habe Ihre Bücher "Client/Server mit Delphi", "Win32-Lösungen" und "COM+". Sie haben mir schon oft sehr geholfen und sind jede Mark wert :-)

      Klaus Musc

      Comment

      Working...
      X