Comment modifier une colonne MySQL pour autoriser NULL?

396

MySQL 5.0.45

Quelle est la syntaxe pour modifier une table pour permettre à une colonne d'être nulle, alternativement ce qui ne va pas avec ceci:

ALTER mytable MODIFY mycolumn varchar(255) null;

J'ai interprété le manuel comme simplement exécuter ce qui précède et il recréerait la colonne, cette fois permettant null. Le serveur me dit que j'ai des erreurs syntaxiques. Je ne les vois tout simplement pas.

zmf
la source
la colonne n'est pas unique ou quelque chose comme ça
zmf

Réponses:

600

Vous voulez ce qui suit:

ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);

Les colonnes peuvent être annulées par défaut. Tant que la colonne n'est pas déclarée UNIQUEou NOT NULL, il ne devrait pas y avoir de problème.

Daniel Spiewak
la source
14
Il y a un cas de bord qui est le TIMESTAMPtype, qui selon votre version de MySQL et votre configuration peut être NOT NULLspécifié NULLcomme suggéré par @ConroyP est plus correct.
Matthew Buckett
1
Cela n'a pas fonctionné pour moi! La colonne n'a pas changé. Peut-être parce que j'avais une contrainte sur une autre table où la colonne était utilisée (quand elle n'était pas nulle).
Rocologo
251

Votre erreur de syntaxe est provoquée par une «table» manquante dans la requête

ALTER TABLE mytable MODIFY mycolumn varchar(255) null;
ConroyP
la source
26
C'est en fait la bonne réponse - bien que la clause NULL ne soit pas requise, il n'y a rien de mal à la fournir. La table manquante de l'instruction ALTER TABLE était le vrai problème.
SamStephens
@SamStephens et Xofo: Il y a une question primaire et secondaire ("alternativement"). Ceci est la bonne réponse à la question secondaire tandis que la réponse acceptée est la bonne réponse à la question principale.
jdunk
@SamStephens Juste parce qu'il n'y a rien de mal à fournir NULL, cela ne rend pas cette réponse plus "correcte" que la réponse acceptée? Savoir que les colonnes sont annulables par défaut (comme mentionné dans la réponse acceptée) est utile en ce qui concerne cette question particulière.
rybo111
OP ne sait pas pourquoi leur déclaration n'a pas fonctionné. Cette réponse explique pourquoi.
SamStephens
28

Ma solution:

ALTER TABLE table_name CHANGE column_name column_name type DEFAULT NULL

Par exemple:

ALTER TABLE SCHEDULE CHANGE date date DATETIME DEFAULT NULL;
Krishnrohit
la source
7

Dans certaines circonstances (si vous obtenez "ERREUR 1064 (42000): vous avez une erreur dans votre syntaxe SQL; ..."), vous devez faire

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

Ma solution est la même que @Krishnrohit:

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

En fait, j'avais la colonne définie comme NOT NULLmais avec la requête ci-dessus, elle a été remplacée par NULL.

PS Je sais que c'est un vieux fil mais personne ne semble reconnaître que CHANGEc'est aussi correct.

Hmerman6006
la source
-5

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

Jan Nejedly
la source
18
Il serait préférable que votre réponse fournisse une valeur supplémentaire en plus des autres réponses. Dans ce cas, votre réponse n'apporte pas de valeur supplémentaire, car Daniel Spiewak a déjà publié cette solution. Si une réponse précédente vous a été utile, vous devriez la voter une fois que vous avez suffisamment de réputation
Luís Cruz