Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   [erledigt] ALTER COLUMN ... TYPE klappt nicht mit seltsamer (https://www.delphipraxis.net/141761-%5Berledigt%5D-alter-column-type-klappt-nicht-mit-seltsamer.html)

Jürgen Thomas 15. Okt 2009 15:21

Datenbank: Firebird • Version: 2.1 • Zugriff über: IBExpert Personal

[erledigt] ALTER COLUMN ... TYPE klappt nicht mit seltsamer
 
Hallo,

ich habe in einer Tabelle ein Feld VARCHAR(10), dessen Inhalte tatsächlich immer genau 4 Zeichen lang sind mit UTF8. Deshalb wollte ich die Tabelle jetzt anpassen:
SQL-Code:
ALTER TABLE Abteilungen
  ALTER COLUMN Kurzbezeichnung TYPE CHAR(4);
Dabei bekomme ich aber eine in diesem Zusammenhang seltsame Fehlermeldung:
Zitat:

This operation is not defined for system tables.
unsuccessful metadata update.
New size specified for column KURZBEZEICHNUNG must be at least 40 characters.
Ich kann verstehen, dass eine solche Änderung nicht ohne Weiteres ausgeführt werden kann, weil so viele Nebenbedingungen verletzt sein können; beispielsweise ist die Spalte bisher über eine Domain definiert worden (aber auch wenn ich als neuen Typ eine passende Domain auswähle, gibt es dieselbe Fehlermeldung). Aber wieso wird eine Länge von mindestens 40 Zeichen verlangt? :roll:

Kann mir jemand helfen? Danke! Jürgen

Bernhard Geyer 15. Okt 2009 15:26

Re: ALTER COLUMN ... TYPE klappt nicht mit seltsamer Meldung
 
Evtl. hat hier Firebird ähliche Einschränkungen wie Oracle so das verkleinern nur über eine Hilfspalte möglich ist.

Jürgen Thomas 15. Okt 2009 15:54

Re: ALTER COLUMN ... TYPE klappt nicht mit seltsamer Meldung
 
Es scheint sich tatsächlich nur um eine irreführende Fehlermeldung zu handeln. Ein Versuch, auf CHAR(20) zu ändern, klappt nämlich.

Na gut, dann muss es eben über eine Hilfsspalte gehen. Jürgen

hoika 16. Okt 2009 08:15

Re: [erledigt] ALTER COLUMN ... TYPE klappt nicht mit seltsa
 
Hallo,

viell. hilft das hier weiter.

Firebird / UTF8

Ein UTF8 Zeichen könnte 4 Byte verbraten, FB berücksichtigt das.
Warum nicht 20 statt 16 (4*4) angezeigt wird -> ?


Heiko

Jürgen Thomas 16. Okt 2009 08:54

Re: [erledigt] ALTER COLUMN ... TYPE klappt nicht mit seltsa
 
Hallo,

ich sagte ja von Anfang an: Mir ist klar, dass es nicht unbedingt ausgeführt wird. Eine Fehlermeldung wie "mindestens 16 Zeichen" hätte ich sofort verstanden, aber 40?

Wer weiß, woher die Fehlermeldung kommt. IBExpert sorgt dafür, dass der eine ALTER-Befehl sich um alles kümmert (daher auch der Verweis auf die Systemtabellen). Vielleicht werden aus dem einen ALTER-Befehl etwa 5 Zwischenbefehle, einer davon liefert eine missverständliche Fehlermeldung, die anderen setzen das in die endgültig irreführende Meldung um.

Aber ich glaube, das brauchen wir wirklich nicht zu vertiefen (auch HK nicht). Ich nehme eben hin, dass der Umweg über die temp. Spalte nötig ist. Jürgen

hoika 17. Okt 2009 09:12

Re: [erledigt] ALTER COLUMN ... TYPE klappt nicht mit seltsa
 
Hallo,

du hast 10 Zeichen. Ein Unicode belegt im schmlimmsten Fall 4 Byte
(siehe mein Link).
10*4 = 40 ...

So habe ich den Link zumindestens verstanden.


Heiko

Jürgen Thomas 17. Okt 2009 09:26

Re: [erledigt] ALTER COLUMN ... TYPE klappt nicht mit seltsa
 
Hallo Heiko,

ahhh, dieser Hinweis macht jedenfalls die Meldung verständlich. Das Feld war bisher mit der maximalen Länge von 10 Zeichen definiert; die Inhalte hatten tatsächlich genau 4 Zeichen. Das ist der Unterschied zwischen Theorie und Praxis: Das DBMS kümmert sich um die Theorie (10x4), der Anwender um die Praxis (4x4).

Aber wie gesagt: Umweg benutzen, Thema erledigt. Jürgen


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz