MySQLカラムを変更してNULLを許可するにはどうすればよいですか?


396

MySQL 5.0.45

列をnullにできるようにテーブルを変更する構文とは何ですか?

ALTER mytable MODIFY mycolumn varchar(255) null;

上記を実行するだけでマニュアルを解釈すると、列が再作成され、今回はnullが許可されます。サーバーから、構文エラーがあると言われました。私はそれらを見ません。


列が一意ではない、またはそのようなもの
zmf 2008年

回答:


600

次のものが必要です。

ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);

列はデフォルトでnull可能です。長い列のように宣言されていないUNIQUEか、NOT NULL何か問題があってはなりません。


14
TIMESTAMPMySQLのバージョンと構成に応じて@ConroyPで提案されているようにNOT NULL指定できるタイプのエッジケースがありNULLます。
Matthew Buckett、2016年

1
これは私にはうまくいきませんでした!列は変更されませんでした。おそらく、列が使用されている別のテーブルに対する制約があったためです(nullでない場合)。
Rocologo 16

251

構文エラーは、クエリに「テーブル」がないために発生します

ALTER TABLE mytable MODIFY mycolumn varchar(255) null;

26
これは実際に正しい答えです。NULL句は必須ではありませんが、NULL句を指定しても問題はありません。ALTER TABLEステートメントから欠落しているTABLEが本当の問題でした。
SamStephens 2014年

@SamStephensとXofo:一次と二次(「交互」)の質問があります。これは二次的な質問に対する正解ですが、承認された回答は一次的な質問に対する正解です。
jdunk

@SamStephensを提供することNULLに何の問題もないという理由だけで、この回答は受け入れられた回答よりも「正しい」とは言えませんか?列はデフォルトでnull可能であることを(受け入れられた回答で述べたように)知っていると、この特定の質問に関して役立ちます。
rybo111

OPは彼らの発言がうまくいかなかった理由を知りません。この答えはその理由を説明しています。
SamStephens

28

私の解決策:

ALTER TABLE table_name CHANGE column_name column_name type DEFAULT NULL

例えば:

ALTER TABLE SCHEDULE CHANGE date date DATETIME DEFAULT NULL;


3

私の解決策は@Krishnrohitと同じです:

ALTER TABLE `table` CHANGE `column_current_name` `new_column_name` DATETIME NULL;

実際に列を設定しましNOT NULLたが、上記のクエリでは次のように変更されましたNULL

PS私はこれが古いスレッドであることを知っていますが、それCHANGEも正しいことを誰も認めていないようです。


-5

使用する: ALTER TABLE mytable MODIFY mycolumn VARCHAR(255);


18
あなたの答えが他の答えの上に追加の価値を提供した方がいいでしょう。この場合、Daniel Spiewakが既にそのソリューションを投稿しているため、あなたの回答は追加の価値を提供しません。前の回答は参考になりました場合は、次のことを行う必要があり、それを投票あなたは十分に持っていたら評判
ルイス・クルーズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.