Как удалить 'NOT NULL' из столбца в MySQL?

команда show create table показывает следующее:

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

как изменить этот столбец, чтобы удалить NOT null? Мне нужно, чтобы это было:

'columnA' varchar(6) DEFAULT NULL;

Я думал, что следующим будет работать, но это не имеет никакого эффекта:

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

3 ответов


попробуйте это вместо этого:

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

обычно ответ Эрика должен работать:

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

(хотя часть "NULL DEFAULT NULL" необязательна).

но, как и у вас, у меня был случай, который только что вернулся нормально, ничего не делая. В моем случае это связано с тем, что мой ключ был частью первичного ключа. Поэтому мне пришлось сделать следующее:--4-->

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

С этим последним запросом, указывающим, что ваш первичный ключ на самом деле.

кроме того, если кто-то думает, что это слишком многословно, следующий комбинированный запрос не работает, хотя он должен быть идентичным:

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

Я предполагаю, что mysql переписывает этот последний запрос в другой порядок, так что первичный ключ все еще существует, когда выполняется изменение, следовательно, необходимо разбить его на три оператора.

FYI, это на mysql 5.1.47, но я еще не нашел никакой документации, указывающей, почему это происходит, поэтому я не знаю, какие версии затронуты.


внесите изменения (локально) в phpMyAdmin. Он покажет запрос, который он использовал для изменения. Выполните этот запрос в production, и все готово.

вы можете использовать эту стратегию в любом инструменте GUI, чтобы увидеть запросы, которые он выполняет. Я лично использую продолжение Pro (для Mac OS X) вместо phpMyAdmin.