【问题标题】: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 值,因此需要将其合并到向表中添加新行的所有查询中!或者,您可能会将其作为约束的一部分,该约束在对表的任何行更改后起作用,在这种情况下,需要一个完整的答案来说明如何完成。

标签: mysql sql


【解决方案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 '';
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-02-09
            • 2020-01-07
            • 2011-03-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多