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

Posted

技术标签:

【中文标题】将 TEXT 列默认值从 null 更改为 \'\'(空字符串)【英文标题】:Change TEXT column default from null to '' (empty string)将 TEXT 列默认值从 null 更改为 ''(空字符串) 【发布时间】:2013-04-15 00:53:36 【问题描述】:

我有一个表,在创建表时未指定默认值。 现在我想将默认值更改为''(空字符串)。 当我运行 alter table query 时,它会成功,但如果未指定列值,则仍然在新行插入表上将 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 查询::

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

【问题讨论】:

当 myColumn 为 NULL THEN '' ELSE myColumn END 时的情况 我的解决方案最小改变你的数据库结构。 你不应该对 col2 应用默认值,因为它的 TEXT 类型并且它不能是 DEFAULT。 @realnumber3012 - 除非我误解了你,否则这是查询的一部分;它不会像 OP 请求那样更改列的 DEFAULT 值,因此需要将其合并到向表中添加新行的所有查询中!或者,您可能会将其作为约束的一部分,该约束在对表的任何行更改后起作用,在这种情况下,需要一个完整的答案来说明如何完成。 【参考方案1】:

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

【讨论】:

【参考方案2】:

首先,Table 架构不正确。它会抛出错误: 表中不存在键列“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 语句

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

错误消息是:BLOB、TEXT、GEOMETRY 或 JSON 列 'col2' 不能有 default 值。 Reference

好读:Why can't a text column have a default value in mysql?

【讨论】:

【参考方案3】:

phpmyadmin 中转到特定字段的“更改”选项并选择 Default2 as defined: 并将下面的文本框留空

例如:

场频 类型 VARCHAR 长度/值1 20 Default2 定义:并且文本框为空

最后点击保存按钮

【讨论】:

【参考方案4】:

Blob 和文本列不能有 DEFAULT 值 (Ref)。根据平台,当您尝试执行此操作时,MySQL 可能会生成警告或错误。

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

【讨论】:

你是对的@Salman。 Blob 和文本类型不能有默认值。 @ToolmakerSteve - 对于任何较新版本的 mysql,varchar 的最大长度不再是 255。【参考方案5】:

试试这个

ALTER TABLE yourtable_name ALTER COLUMN columnname SET DEFAULT ' ' ;

它对我有用。希望它能帮助你。

【讨论】:

不允许我编辑我的评论...我是在 varchar 而不是 text 上这样做的 这是包含空格的字符串 ' '。它不是空的。 你可以 .trim() 使它成为一个空字符串。但是,是的,这不是一个空字符串。 JDGuide:是否故意将默认值设置为非空字符串(一个空格),即使这不是所要求的(恕我直言,通常也不这样做)?如果这是偶然的,请考虑更改您的答案。在此之前,这是对该问题的错误答案。或者需要解释。【参考方案6】:

使用modify

ALTER TABLE `table1` MODIFY column `col2` text default '';

【讨论】:

【参考方案7】:
ALTER TABLE `table1` change `col2` `col2` text  NOT NULL default '';

【讨论】:

以上是关于将 TEXT 列默认值从 null 更改为 ''(空字符串)的主要内容,如果未能解决你的问题,请参考以下文章

在 Netezza 中将 NOT NULL 约束更改为 NULL

MySQL - 如何修改列默认值?

Laravel 7 将默认守卫更改为员工,但当前经过身份验证的用户返回 null

MariaDB 默认函数将自动增量的 PK 字段更改为 null

将 Excel 中的值从字符串更改为数字

MySQL:错误代码:1118 行大小太大(> 8126)。将某些列更改为 TEXT 或 BLOB