¿Cómo modifico una columna MySQL para permitir NULL?

396

MySQL 5.0.45

¿Cuál es la sintaxis para alterar una tabla para permitir que una columna sea nula? Alternativamente, ¿qué hay de malo en esto?

ALTER mytable MODIFY mycolumn varchar(255) null;

Interpreté el manual como simplemente ejecute lo anterior y recrearía la columna, esta vez permitiendo nulo. El servidor me dice que tengo errores sintácticos. Simplemente no los veo.

zmf
fuente
columna no es única ni nada por el estilo
zmf

Respuestas:

600

Quieres lo siguiente:

ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);

Las columnas son anulables por defecto. Mientras la columna no se declare UNIQUEo NOT NULL, no debería haber ningún problema.

Daniel Spiewak
fuente
14
Hay un caso límite que es el TIMESTAMPtipo, que dependiendo de su versión y configuración de MySQL puede NOT NULLespecificarse NULLsegún lo sugerido por @ConroyP es más correcto.
Matthew Buckett
1
¡Esto no funcionó para mí! La columna no cambió. Tal vez porque tenía una restricción a otra tabla donde se usaba la columna (cuando no era nula).
Rocologo
251

Su error de sintaxis es causado por una "tabla" que falta en la consulta

ALTER TABLE mytable MODIFY mycolumn varchar(255) null;
ConroyP
fuente
26
Esta es realmente la respuesta correcta: aunque no se requiere la cláusula NULL, no hay nada de malo en proporcionarla. La TABLE faltante de la declaración ALTER TABLE fue el verdadero problema.
SamStephens
@SamStephens y Xofo: hay una pregunta primaria y secundaria ("alternativamente"). Esta es la respuesta correcta a la pregunta secundaria, mientras que la respuesta aceptada es la respuesta correcta a la pregunta principal.
jdunk
@SamStephens ¿Solo porque no hay nada de malo en proporcionar NULL, no hace que esta respuesta sea más "correcta" que la respuesta aceptada? Saber que las columnas son anulables por defecto (como se menciona en la respuesta aceptada) es útil con respecto a esta pregunta en particular.
rybo111
OP no sabe por qué su declaración no funcionó. Esta respuesta explica por qué.
SamStephens
28

Mi solución:

ALTER TABLE table_name CHANGE column_name column_name type DEFAULT NULL

Por ejemplo:

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

En algunas circunstancias (si obtiene "ERROR 1064 (42000): tiene un error en su sintaxis SQL; ...") debe hacer

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

Mi solución es la misma que @Krishnrohit:

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

De hecho, tenía la columna configurada como NOT NULLpero con la consulta anterior se cambió aNULL .

PD: Sé que este es un hilo viejo pero nadie parece reconocer que CHANGE también es correcto.

Hmerman6006
fuente
-5

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

Jan Nejedly
fuente
18
Sería mejor si su respuesta proporcionara un valor adicional además de las otras respuestas. En este caso, su respuesta no proporciona un valor adicional, ya que Daniel Spiewak ya publicó esa solución. Si una respuesta anterior fue útil para usted, debe votarla una vez que tenga suficiente reputación
Luís Cruz