234

尝试更改列的数据类型并设置新的默认值时出现以下错误:

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

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'VARCHAR(255) NOT NULL SET DEFAULT '{}'' 附近使用正确的语法

4

7 回答 7

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

第二种可能性相同(感谢 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

对于默认 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

接受的答案效果很好。

如果出现Invalid use of NULL value错误,则在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 回答