Probleme beim Hinzufügen einer Spalte mysql
Hallo Gemeisnchaft,
möchte in einer Tabelle (am Ende) eine neue Spalte hinzufügen
ALTER TABLE staff ADD spalte INT;
MySQL meldet:
#1067 - Fehlerhafter Vorgabewert (DEFAULT) für 'created'
habt ihr da Erfahrung und könnt helfen
möchte in einer Tabelle (am Ende) eine neue Spalte hinzufügen
ALTER TABLE staff ADD spalte INT;
MySQL meldet:
#1067 - Fehlerhafter Vorgabewert (DEFAULT) für 'created'
habt ihr da Erfahrung und könnt helfen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 7000662031
Url: https://administrator.de/contentid/7000662031
Ausgedruckt am: 25.11.2024 um 08:11 Uhr
17 Kommentare
Neuester Kommentar
Du willst eine Spalte einfügen die INT heißt?
https://dev.mysql.com/doc/refman/8.0/en/keywords.html#keywords-8-0-detai ...
https://dev.mysql.com/doc/refman/8.0/en/keywords.html#keywords-8-0-detai ...
Also in Post #1 soll die Spalte "spalte" heißen mit Datentyp INT. @michi1983 schreibt "int varchar(40)" was nicht gehen kann da muss anstelle von int der Spaltenname rein und der kann natürlich nicht "int" heißen oder müsste escaped werden, daher dein Syntax Fehler.
Im letzten Post geht es jetzt doch um eine VARCHAR(255) Spalte? Eventuell ist password ebenso ein reserviertes Wort. Bei MSSQL müsste man es dann klammern [password], bei MySQL waren das glaube ich diese Striche `password`.
Was die Spalte "created" angeht so hat die wohl einen Default Wert, das heißt der müsste eigentlich überall gesetzt sein. Ich könnte mir vorstellen das der erst nachträglich gesetzt wurde und MySQL jetzt auf die Idee kommt da irgendwas zu prüfen aber MySQL ist da auch speziell und prüft tendenziell eher gar nicht als zu viel.
Im letzten Post geht es jetzt doch um eine VARCHAR(255) Spalte? Eventuell ist password ebenso ein reserviertes Wort. Bei MSSQL müsste man es dann klammern [password], bei MySQL waren das glaube ich diese Striche `password`.
Was die Spalte "created" angeht so hat die wohl einen Default Wert, das heißt der müsste eigentlich überall gesetzt sein. Ich könnte mir vorstellen das der erst nachträglich gesetzt wurde und MySQL jetzt auf die Idee kommt da irgendwas zu prüfen aber MySQL ist da auch speziell und prüft tendenziell eher gar nicht als zu viel.
Zitat von @martenk:
nein - password - oben war ein Fehler
ALTER TABLE staff
ADD password varchar(40) NOT NULL
AFTER is_present;
MySQL meldet: Dokumentation
#1067 - Fehlerhafter Vorgabewert (DEFAULT) für 'created'
nein - password - oben war ein Fehler
ALTER TABLE staff
ADD password varchar(40) NOT NULL
AFTER is_present;
MySQL meldet: Dokumentation
#1067 - Fehlerhafter Vorgabewert (DEFAULT) für 'created'
https://dev.mysql.com/doc/refman/8.0/en/keywords.html#keywords-8-0-detai ...
Normalerweise nimmt man für solche Spalten sog. Präfixes. Dann hat man kein Problem mit reservierten Worten..
password ist reserviert.
Zitat von @martenk:
super klasse SlainteMhath
daran lag es - magst du mir vielleicht erklären, wieso das so ist
super klasse SlainteMhath
daran lag es - magst du mir vielleicht erklären, wieso das so ist
Dazu müsste man wissen was vorher die Tabellendefinition für "created" war und das kannst du jetzt nicht mehr ermitteln, zumindest nicht auf deinem Testsystem.
Moin,
Die Lösung des Problems ist viel einfacher:
Du willst eine Spalte mit dem Attribut NOT NULL erzeugen. Das Feld darf also nicht leer sein. Ich gehe mal davon aus, dass da schon Daten drin sind. Also müssen die beim Erzeugen mit Daten gefüllt werden. Das Feld darf also nicht leer sein. Deshalb ist der Vorgabewert fehlerhaft. Lösung: Befülle das Feld mit einem Vorgabewert beim Erzeugen der Spalte. Dann lösche den Vorgabewert wieder. Wie? Das steht im Handbuch.
hth
Erik
Zitat von @martenk:
nein - password - oben war ein Fehler
ALTER TABLE staff
ADD password varchar(40) NOT NULL
AFTER is_present;
MySQL meldet: Dokumentation
#1067 - Fehlerhafter Vorgabewert (DEFAULT) für 'created'
nein - password - oben war ein Fehler
ALTER TABLE staff
ADD password varchar(40) NOT NULL
AFTER is_present;
MySQL meldet: Dokumentation
#1067 - Fehlerhafter Vorgabewert (DEFAULT) für 'created'
Die Lösung des Problems ist viel einfacher:
Du willst eine Spalte mit dem Attribut NOT NULL erzeugen. Das Feld darf also nicht leer sein. Ich gehe mal davon aus, dass da schon Daten drin sind. Also müssen die beim Erzeugen mit Daten gefüllt werden. Das Feld darf also nicht leer sein. Deshalb ist der Vorgabewert fehlerhaft. Lösung: Befülle das Feld mit einem Vorgabewert beim Erzeugen der Spalte. Dann lösche den Vorgabewert wieder. Wie? Das steht im Handbuch.
hth
Erik
magst du mir vielleicht erklären, wieso das so ist
Root-Cause: Schlampiges DB-Design. Vermutlich wurde die Tabelle mit einer alten MySQL Version oder mit anderen "sql_mode" Einstellungen erstellt.
Das Feld "created" ist als "NOT NULL" definiert, hat aber keinen Vorgebewert definiert. Der MODIFY von oben legt diesen fest.