234

列のデータ型を変更して新しいデフォルト値を設定しようとすると、次のエラーが発生しました。

ALTER TABLE foobar_data ALTER COLUMN col VARCHAR(255) NOT NULL SET DEFAULT '{}';

エラー1064(42000):SQL構文にエラーがあります。1行目の'VARCHAR(255)NOT NULL SET DEFAULT' {}''の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

4

7 に答える 7

328
ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT '{}';

同じことを行う2番目の可能性(juergen_dのおかげで):

ALTER TABLE foobar_data CHANGE COLUMN col col VARCHAR(255) NOT NULL DEFAULT '{}';
于 2012-07-03T13:54:10.373 に答える
145

フォローアップとして、デフォルトを設定したいだけの場合は、ALTER..SET構文を使用できることを確認してください。他のすべてのものをそこに入れないでください。列定義の残りの部分を挿入する場合は、受け入れられた回答に従ってMODIFYまたはCHANGE構文を使用します。

とにかく、列のデフォルトを設定するためのALTER構文(これは私がここに来たときに探していたものだからです):

ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT 'literal';

'literal'は数字でもかまいません(例...SET DEFAULT 0)。私はそれを試したことがありません...SET DEFAULT CURRENT_TIMESTAMPが、なぜですか?

于 2015-01-12T17:28:21.717 に答える
29

すでに作成されている列にデフォルト値を追加したい場合、これは私にとってはうまくいきます:

ALTER TABLE Persons
ALTER credit SET DEFAULT 0.0;
于 2017-09-06T09:41:08.313 に答える
4

DEFAULT CURRENT_TIMESTAMPの場合:

ALTER TABLE tablename
 CHANGE COLUMN columnname1 columname1 DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
 CHANGE COLUMN columnname2 columname2 DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

二重列名宣言に注意してください

DEFAULT CURRENT_TIMESTAMPの削除:

ALTER TABLE tablename
 ALTER COLUMN columnname1 DROP DEFAULT,
 ALTER COLUMN columnname2 DROPT DEFAULT;
于 2018-01-27T14:15:59.727 に答える
2

受け入れられた回答はうまく機能します。

NULL値の無効な使用エラーの場合、 NULL値で、すべてのNULL値をその列のデフォルト値に更新してから、変更を試みてください。

UPDATE foobar_data SET col = '{}' WHERE col IS NULL;

ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT '{}';
于 2019-06-11T07:01:01.543 に答える
1

上記がうまくいかない場合(つまり、新しいSQLまたはAzureを使用している場合)、次のことを試してください。

1)既存の列制約を削除します(存在する場合):

ALTER TABLE [table_name] DROP CONSTRAINT DF_my_constraint

2)新しいものを作成します。

ALTER TABLE [table_name] ADD CONSTRAINT DF_my_constraint  DEFAULT getdate() FOR column_name;
于 2015-12-03T00:00:14.280 に答える
0

これを試して

ALTER TABLE `table_name` CHANGE `column_name` `column_name` data_type  NULL DEFAULT '';

このような

ALTER TABLE `drivers_meta` CHANGE `driving_license` `driving_license` VARCHAR(30) NULL DEFAULT '';
于 2018-08-02T08:24:48.620 に答える