Ответ 1
Попробуйте это вместо:
ALTER TABLE tbl_name MODIFY columnA varchar(6) NULL DEFAULT NULL;
Команда show create table показывает следующее:
'columnA' varchar(6) NOT NULL DEFAULT '';
Как мне изменить этот столбец, чтобы удалить ненулевое значение? Мне это нужно:
'columnA' varchar(6) DEFAULT NULL;
Я думал, что следующее будет работать, но это не имеет никакого эффекта:
ALTER TABLE tbl_name MODIFY columnA varchar(6) DEFAULT NULL;
Попробуйте это вместо:
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 необязательна).
Но, как и вы, у меня был случай, который только что вернулся, ничего не делая. В моем случае это связано с тем, что мой ключ был частью первичного ключа. Поэтому мне пришлось сделать следующее:
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. Он покажет запрос, который он использовал для изменения. Выполните этот запрос в процессе производства, и все готово.
Вы можете использовать эту стратегию в любом графическом инструменте для просмотра запросов, которые он выполняет. Я лично использую Sequel Pro (для Mac OS X) вместо phpMyAdmin.