2

我正在使用包含列的表“media_content”

id varchar(50) NOT NULL,
shorttitle varchar(200) DEFAULT NULL,
sourceimage blob

后来我将 sourceimage 列修改为默认值NULL

ALTER TABLE media_content
MODIFY COLUMN sourceimage VARCHAR(250) DEFAULT NULL;

现在我想将sourceimage列默认设置为NONE,可以这样做吗?

4

3 回答 3

4

您可以将(字符串类型列的)默认值指定为字符串文字常量,例如,但请注意,这样的值实际上与(表示根本没有值)'NONE'具有非常不同的含义。NULL

使用NULL下所述:

NULL在您习惯之前,它的价值可能会令人惊讶。从概念上讲,NULL表示“缺失的未知值”,它的处理方式与其他值有些不同。

[ deletia ]

使用时的一个常见错误NULL是假设不可能将零或空字符串插入定义为 的列中NOT NULL,但事实并非如此。这些实际上是价值,而NULL意味着“没有价值”。</p>

如果您只想以NULL其他方式向用户呈现值,您应该在应用程序的表示层处理它。

于 2012-10-18T07:47:02.213 回答
3

使用相同的ALTER语法,可以将默认值更改NONE为如下:

ALTER TABLE media_content
MODIFY COLUMN sourceimage VARCHAR(250) DEFAULT 'NONE';
于 2012-10-18T07:48:03.627 回答
1

NULL || NOT NULL对我来说,当您考虑以下问题时,问题(以及 , 和默认值之间的关系)变得更加清晰:

NOT NULL要求:必须有默认值,否则不允许插入没有指定值的记录(指定默认值,或选择“无”⇒未指定默认值;可能表明您在这两个选项之间的偏好:后者选项意味着在该字段中没有值的插入应该被拒绝并出现错误);然而:

NULLNOT REQUIREDNULL表示没有为字段指定值,或者值未知。(如果一个字段是“可空的”,那么试图说您不想指定默认值将是无稽之谈;因为根据可空性,即使您不指定此字段,也将允许插入值!因此,该字段必须具有默认值:无论是默认NULL值还是某个特定值。)

如果您使用的是 phpMyAdmin,您应该访问相关表的结构选项卡,找到相关列定义,然后选择“更改”。在“默认”下拉菜单中,您将看到“无”选项:选择该选项,然后按“保存”。记下由此生成的 SQL 命令,您将看到如下内容:

ALTER TABLE  `…_tbl` CHANGE  `…_fld` `…_fld` TEXT NOT NULL;

但是,如果我们尝试在用户界面中指定默认值应为“无”但应允许 NULL;那么默认值将改为“”(空字符串)或“0000-00-00 00:00:00”(在DATETIME字段的情况下)等。所以这里的关键是列(字段)是否为NULLABLE或不!

这个“无”选项可能部分是 phpMyAdmin 用来表示底层数据库中实际发生的事情的抽象的产物(这是不同的)。

在将您的字段更改为NOT NULL类型之前;首先检查现有值,并确保它们会以您批准的方式自动更改。

换句话说:NULL/NOT NULL和默认值;本质上是相互关联的:通过限制您可以指定的值组合来有效地表示这种关系的用户界面在人体工程学上是有缺陷的。phpMyAdmin 可能还有其他工具,可以在这方面进行改进。

于 2016-02-15T18:30:00.497 回答