Wie ändere ich eine MySQL-Spalte, um NULL zuzulassen?

396

MySQL 5.0.45

Wie lautet die Syntax zum Ändern einer Tabelle, damit eine Spalte null sein kann, oder was ist daran falsch:

ALTER mytable MODIFY mycolumn varchar(255) null;

Ich habe das Handbuch so interpretiert, dass es nur das oben Genannte ausführt und die Spalte neu erstellt, diesmal mit null. Der Server teilt mir mit, dass ich syntaktische Fehler habe. Ich sehe sie einfach nicht.

zmf
quelle
Spalte ist nicht eindeutig oder so etwas anderes
zmf

Antworten:

600

Sie möchten Folgendes:

ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);

Spalten sind standardmäßig nullwertfähig. Solange die Spalte nicht deklariert ist UNIQUEoder NOT NULL, sollte es keine Probleme geben.

Daniel Spiewak
quelle
14
Es gibt einen Randfall, bei dem es sich um den TIMESTAMPTyp handelt, der abhängig von Ihrer MySQL-Version und -Konfiguration angegeben werden kann NOT NULL, NULLwie von @ConroyP vorgeschlagen.
Matthew Buckett
1
Das hat bei mir nicht funktioniert! Die Spalte hat sich nicht geändert. Vielleicht, weil ich eine Einschränkung für eine andere Tabelle hatte, in der die Spalte verwendet wurde (wenn nicht null).
Rocologo
251

Ihr Syntaxfehler wird durch eine fehlende "Tabelle" in der Abfrage verursacht

ALTER TABLE mytable MODIFY mycolumn varchar(255) null;
ConroyP
quelle
26
Dies ist eigentlich die richtige Antwort - obwohl die NULL-Klausel nicht erforderlich ist, ist nichts falsch daran, sie bereitzustellen. Die fehlende TABLE in der Anweisung ALTER TABLE war das eigentliche Problem.
SamStephens
@ SamStephens und Xofo: Es gibt eine primäre und eine sekundäre ("alternativ") Frage. Dies ist die richtige Antwort auf die sekundäre Frage, während die akzeptierte Antwort die richtige Antwort auf die primäre Frage ist.
JDunk
@SamStephens Nur weil es nichts Falsches an der Bereitstellung gibt NULL, macht es diese Antwort nicht "korrekter" als die akzeptierte Antwort? In Bezug auf diese spezielle Frage ist es hilfreich zu wissen, dass Spalten standardmäßig nullwertfähig sind (wie in der akzeptierten Antwort erwähnt).
rybo111
OP weiß nicht, warum ihre Aussage nicht funktioniert hat. Diese Antwort erklärt warum.
SamStephens
28

Meine Lösung:

ALTER TABLE table_name CHANGE column_name column_name type DEFAULT NULL

Zum Beispiel:

ALTER TABLE SCHEDULE CHANGE date date DATETIME DEFAULT NULL;
Krishnrohit
quelle
7

Unter bestimmten Umständen (wenn Sie "ERROR 1064 (42000): Sie haben einen Fehler in Ihrer SQL-Syntax; ..." erhalten) müssen Sie dies tun

ALTER TABLE mytable MODIFY mytable.mycolumn varchar(255);
Gerald Senarclens de Grancy
quelle
3

Meine Lösung ist die gleiche wie bei @Krishnrohit:

ALTER TABLE `table` CHANGE `column_current_name` `new_column_name` DATETIME NULL;

Ich hatte die Spalte tatsächlich so eingestellt, NOT NULLaber mit der obigen Abfrage wurde sie in geändert NULL.

PS Ich weiß, dass dies ein alter Thread ist, aber niemand scheint anzuerkennen, dass dies CHANGEauch richtig ist.

Hmerman6006
quelle
-5

Verwenden: ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);

Jan Nejedly
quelle
18
Es wäre besser, wenn Ihre Antwort zusätzlich zu den anderen Antworten einen zusätzlichen Wert liefern würde. In diesem Fall bietet Ihre Antwort keinen zusätzlichen Wert, da Daniel Spiewak diese Lösung bereits veröffentlicht hat. Wenn eine vorherige Antwort für Sie hilfreich war, sollten Sie sie abstimmen, sobald Sie genug Ruf haben
Luís Cruz