Show create tableコマンドは、次のことを示しています。
'columnA' varchar(6) NOT NULL DEFAULT '';
Null以外が削除されるように、その列を変更するにはどうすればよいですか?私はそれが必要です:
'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 DEFAULTNULL」の部分はオプションです)。
しかし、あなたと同じように、何もせずにOKに戻っただけのケースがありました。私の場合、私のキーが主キーの一部であったことが原因のようです。だから私は次のことをしなければなりませんでした:
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は最後のクエリを別の順序に書き換えて、変更が実行されたときに主キーがまだ存在するようにするため、3つのステートメントに分割する必要があると思います。
参考までに、これはmysql 5.1.47にありますが、これが発生する理由を示すドキュメントがまだ見つからないため、影響を受けるバージョンがわかりません。
PhpMyAdminで(ローカルに)変更を加えます。変更に使用したクエリが表示されます。このクエリを本番環境で実行すれば完了です。
この戦略を任意のGUIツールで使用して、実行するクエリを確認できます。私は個人的にphpMyAdminの代わりに Sequel Pro(Mac OS X用) を使用しています。