21

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;
4

3 に答える 3

29

代わりにこれを試してください:

ALTER TABLE tbl_name MODIFY columnA varchar(6) NULL DEFAULT NULL; 
于 2010-06-08T20:12:03.400 に答える
5

通常、エリックの答えはうまくいくはずです:

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にありますが、これが発生する理由を示すドキュメントがまだ見つからないため、影響を受けるバージョンがわかりません。

于 2011-06-13T23:50:39.677 に答える
2

phpMyAdminで(ローカルに)変更を加えます。変更に使用したクエリが表示されます。このクエリを本番環境で実行すると、完了です。

この戦略を任意のGUIツールで使用して、実行するクエリを確認できます。私は個人的にphpMyAdminの代わりにSequelPro (Mac OS X用)を使用しています。

于 2010-06-08T21:18:02.157 に答える