Подтвердить что ты не робот

Как сбросить "NOT NULL" из столбца в MySQL?

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

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

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

'columnA' varchar(6) DEFAULT NULL;

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

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

Ответ 1

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

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

Ответ 2

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

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

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

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

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, но я еще не нашел никакой документации, указывающей, почему это происходит, поэтому я не знаю, какие версии затронуты.

Ответ 3

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

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