2010-06-08 15 views
16

Un espectáculo mandato de creación de tabla muestra la siguiente:¿Cómo elimino 'NOT NULL' de una columna en MySQL?

'columnA' varchar(6) NOT NULL DEFAULT ''; 

¿Cómo modifico esa columna para que el no se elimina nula? necesito que sea:

'columnA' varchar(6) DEFAULT NULL; 

pensé que el siguiente iba a funcionar, pero no tiene ningún efecto:

ALTER TABLE tbl_name MODIFY columnA varchar(6) DEFAULT NULL; 

Respuesta

21

Tal vez puedas probar:

ALTER TABLE tbl_name MODIFY columnA varchar(6) NULL DEFAULT NULL; 
+0

No hizo la diferencia. – Will

+1

@Will: Funciona para mí en 5.1.35 - ¿Qué error está recibiendo? –

+0

Ningún error. Consulta bien, 0 filas afectadas. 0 registros, 0 duplicados, 0 advertencias. – Will

2

hacer el cambio (de forma local) en phpMyAdmin. Mostrará la consulta que utilizó para el cambio. Ejecute esta consulta en producción y listo.

Puede utilizar esta estrategia en cualquier herramienta de GUI para ver las consultas que realiza. Yo personalmente uso Sequel Pro (for Mac OS X) en lugar de phpMyAdmin.

+1

Esta pregunta no contiene ningún contexto relacionado con phpMyAdmin. – Knubo

+0

@Knubo Cierto, pero mi "respuesta" contiene una estrategia para generar sentencias ALTER TABLE utilizando una GUI. –

4

Normalmente, la respuesta de Eric debería funcionar:

ALTER TABLE tbl_name MODIFY columnA varchar(6) NULL DEFAULT NULL; 

(Aunque la parte 'NULL NULL DEFAULT' es opcional).

Pero, como usted, tuve un caso que acaba de regresar bien sin hacer nada. En mi caso, parece deberse al hecho de que mi clave era parte de la clave principal. Así que tuve que hacer lo siguiente:

ALTER TABLE tbl_name DROP PRIMARY KEY; 
ALTER TABLE tbl_name MODIFY columnA varchar(6); 
ALTER TABLE tbl_name ADD PRIMARY KEY (columnA); 

con la última consulta que especifica cuál es la clave principal en realidad.

Además, en caso de que alguien piensa que es demasiado detallado, la siguiente consulta combinada no funciona, a pesar de que debería ser idéntica:

ALTER TABLE tbl_name DROP PRIMARY KEY, MODIFY columnA varchar(6), ADD PRIMARY KEY (columnA); 

que asumen que MySQL reescribe que la última consulta en un orden diferente, por lo que la clave primaria todavía existe cuando se realiza la modificación, de ahí la necesidad de dividirla en tres enunciados.

FYI, esto está en mysql 5.1.47 pero aún no he encontrado ninguna documentación que indique por qué sucede esto, así que no sé qué versiones se ven afectadas.

Cuestiones relacionadas