将TEXT列的默认值从null更改为''(空字符串)

15

我有一个表,在创建表时没有指定默认值。 现在,我想将默认值更改为空字符串''。 当我运行alter table查询时,它执行成功,但是在插入新行时,如果列值未指定,则表仍将考虑NULL作为默认值。

表模式:

CREATE TABLE `table1` (
  `col1` INT(11) NOT NULL AUTO_INCREMENT,
  `col2` TEXT,
  `col3` INT(11) DEFAULT NULL,
  `col4` TINYINT(1) DEFAULT '0',
  PRIMARY KEY (`id`)
);

修改查询语句:

ALTER TABLE `table1` change `col2` `col2` text  default '';

1
CASE WHEN myColumn IS NULL THEN '' ELSE myColumn END - realnumber3012
我的解决方案最小化更改您的数据库结构。 - realnumber3012
1
你不应该将默认值应用于 col2,因为它是 TEXT 类型,不能有默认值。 - JDGuide
@realnumber3012 - 除非我误解了您的意思,否则这是查询的一部分;它不会更改列的默认值,正如OP所请求的那样,因此需要将其纳入添加新行到表中的所有查询中!或者您可能正在提出它作为在表中任何行更改之后起作用的约束的一部分,在这种情况下,需要一个完整的答案,以展示如何完成。 - ToolmakerSteve
7个回答

21

Blob 和 text 列不能有 DEFAULT 值 (Ref)。根据平台不同,MySQL 可能会在尝试这样做时生成警告或错误。

将数据类型更改为更合适的类型 (例如 VARCHAR)。


你是对的@Salman。Blob和text类型不能有默认值。 - JDGuide
3
@ToolmakerSteve - 在任何新版本的MySQL中,varchar的最大长度不再是255。 - Uncle Iroh

2
使用modify
ALTER TABLE `table1` MODIFY column `col2` text default '';

2
首先,数据表架构不正确。它会抛出错误: 关键列'id'在表中不存在。
CREATE TABLE `test_table1` (
  `col1` INT(11) NOT NULL AUTO_INCREMENT,
  `col2` TEXT,
  `col3` INT(11) DEFAULT NULL,
  `col4` TINYINT(1) DEFAULT '0',
  PRIMARY KEY (`id`)
);

纠正问题本身

CREATE TABLE `test_table1` (
  `col1` INT(11) NOT NULL AUTO_INCREMENT,
  `col2` TEXT,
  `col3` INT(11) DEFAULT NULL,
  `col4` TINYINT(1) DEFAULT '0',
  PRIMARY KEY (`col1`)
);

现在,如果您运行修改语句。
ALTER TABLE `table1` change `col2` `col2` text  default '';

错误信息如下:BLOB、TEXT、GEOMETRY或JSON列“col2”不能有默认值。请参考此链接: Reference 阅读建议:为什么MySQL中的Text列不能设置默认值?请参考此链接:Why can't a text column have a default value in MySQL?

0
ALTER TABLE `table1` change `col2` `col2` text  NOT NULL default '';

0

试试这个

ALTER TABLE yourtable_name ALTER COLUMN columnname SET DEFAULT ' ' ;

这对我有用,希望它也能帮到你。


1
无法编辑我的评论... 我在 varchar 上执行操作,而不是 text。 - Engineiro
6
这是包含空格的字符串。它不是空的。 - Swatantra Kumar
你可以使用 .trim() 将其转换为空字符串。但是,实际上那并不是空字符串。 - Jonathan Laliberte
JD指南:您故意将默认值设置为非空字符串(一个空格),即使这不是所要求的(在我看来也不常见)吗?如果这是意外的,请考虑修改您的答案。在那之前,这是对问题的错误回答。或者需要解释。 - ToolmakerSteve

0
在 phpmyadmin 中,进入特定字段的“更改”选项,并选择 "默认2" 作为 "定义为:",并将下面的文本框留空。
例如:
字段频率
类型 VARCHAR
长度/值1 20

默认2 定义为:文本框留空
最后点击保存按钮。

-1
使用以下查询更改表结构 USE MODIFY ALTER TABLE <table> MODIFY <column> VARCHAR(<XX>) DEFAULT '';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接