我使用的表“media_content”包含列
id varchar(50) NOT NULL, shorttitle varchar(200) DEFAULT NULL, sourceimage blob
后来,我将sourceimage列修改为默认值NULL
NULL
ALTER TABLE media_content MODIFY COLUMN sourceimage VARCHAR(250) DEFAULT NULL;
现在我想将sourceimage列默认为NONE,可以这样做吗?
sourceimage
NONE
mu0hgdu01#
可以将(字符串类型列的)默认值指定为字符串常量,如'NONE',但要注意,这样的值与NULL(表示根本没有值)的含义有很大不同。如Working with NULL Values下所述:NULL值可能会令人惊讶,直到您习惯它。从概念上讲,NULL表示“丢失的未知值”,它的处理方式与其他值略有不同。[ deletia ]使用NULL时的一个常见错误是假设不可能在定义为NOT NULL的列中插入零或空字符串,但事实并非如此,这些实际上是值,而NULL表示“没有值”。如果您只是希望以某种其他方式向用户表示NULL值,则应该在应用程序的表示层进行处理。
'NONE'
[ deletia ]
NOT NULL
xu3bshqb2#
使用相同的ALTER语法,可以将默认值更改为NONE,如下所示:
ALTER
ALTER TABLE media_content MODIFY COLUMN sourceimage VARCHAR(250) DEFAULT 'NONE';
8wigbo563#
对我来说,当您考虑以下内容时,问题(以及NULL || NOT NULL和默认值之间的关系)就变得更加清楚了:NOT NULL ⇒必需:必须有默认值,否则不允许插入没有指定值的记录(指定默认值,或选择“无”⇒未指定默认值;可能表明您在这两个选项之间的偏好:后一个选项意味着在该字段中没有值的插入应该被错误地拒绝);鉴于:NULL ⇒NOT REQUIRED-NULL表示 * 没有为字段指定值 *,或者,值是未知的。(如果一个字段是“NULL”,那么试图说你不想指定默认值是没有意义的;因为根据空性,即使你没有指定这个字段的值,插入也是允许的!因此这个字段必须有一个默认值:不管它是NULL还是某个特定值)。如果你使用的是phpMyAdmin,你应该访问相关表的Structure标签页,找到相关的列定义,然后选择“Change”。在“Default”下拉列表中,你会看到选项“None”:选择它,然后按“保存”。2注意一下这个生成的SQL命令,你会看到类似下面的内容:
NULL || NOT NULL
ALTER TABLE `…_tbl` CHANGE `…_fld` `…_fld` TEXT NOT NULL;
然而,如果我们试图在用户界面中指定,默认值应该是“None”,但是应该允许NULL;则默认值将改为“”(空字符串)或“0000-00 - 00 00:00:00”(对于DATETIME字段)等。因此,此处的关键是列(字段)是否为NULL ABLE!这个“None”选项可能部分是phpMyAdmin用来表示底层数据库中实际发生的事情的抽象的产物(这是不同的)。将字段更改为NOT NULL类型之前;首先检查现有值,并确保它们将以您认可的方式自动更改。换句话说:NULL/NOT NULL以及默认值;基本上是相互关联的:用户界面不能通过限制可以指定的值的组合来有效地表示这种关系,这在人体工程学上是有缺陷的。phpMyAdmin和其他工具可能在这方面需要改进。
DATETIME
wbrvyc0a4#
我可能是错的,但我认为最初的帖子是问如何删除一个默认值,而不是添加字符串文字“none”。如果是这样,你可以这样做:
ALTER TABLE media_content ALTER COLUMN sourceimage DROP DEFAULT;
4条答案
按热度按时间mu0hgdu01#
可以将(字符串类型列的)默认值指定为字符串常量,如
'NONE'
,但要注意,这样的值与NULL
(表示根本没有值)的含义有很大不同。如Working with
NULL
Values下所述:NULL
值可能会令人惊讶,直到您习惯它。从概念上讲,NULL
表示“丢失的未知值”,它的处理方式与其他值略有不同。[ deletia ]
使用
NULL
时的一个常见错误是假设不可能在定义为NOT NULL
的列中插入零或空字符串,但事实并非如此,这些实际上是值,而NULL
表示“没有值”。如果您只是希望以某种其他方式向用户表示
NULL
值,则应该在应用程序的表示层进行处理。xu3bshqb2#
使用相同的
ALTER
语法,可以将默认值更改为NONE
,如下所示:8wigbo563#
对我来说,当您考虑以下内容时,问题(以及
NULL || NOT NULL
和默认值之间的关系)就变得更加清楚了:NOT NULL
⇒必需:必须有默认值,否则不允许插入没有指定值的记录(指定默认值,或选择“无”⇒未指定默认值;可能表明您在这两个选项之间的偏好:后一个选项意味着在该字段中没有值的插入应该被错误地拒绝);鉴于:NULL
⇒NOT REQUIRED-NULL
表示 * 没有为字段指定值 *,或者,值是未知的。(如果一个字段是“NULL”,那么试图说你不想指定默认值是没有意义的;因为根据空性,即使你没有指定这个字段的值,插入也是允许的!因此这个字段必须有一个默认值:不管它是NULL
还是某个特定值)。如果你使用的是phpMyAdmin,你应该访问相关表的Structure标签页,找到相关的列定义,然后选择“Change”。在“Default”下拉列表中,你会看到选项“None”:选择它,然后按“保存”。2注意一下这个生成的SQL命令,你会看到类似下面的内容:
然而,如果我们试图在用户界面中指定,默认值应该是“None”,但是应该允许NULL;则默认值将改为“”(空字符串)或“0000-00 - 00 00:00:00”(对于
DATETIME
字段)等。因此,此处的关键是列(字段)是否为NULL
ABLE!这个“None”选项可能部分是phpMyAdmin用来表示底层数据库中实际发生的事情的抽象的产物(这是不同的)。
将字段更改为
NOT NULL
类型之前;首先检查现有值,并确保它们将以您认可的方式自动更改。换句话说:
NULL
/NOT NULL
以及默认值;基本上是相互关联的:用户界面不能通过限制可以指定的值的组合来有效地表示这种关系,这在人体工程学上是有缺陷的。phpMyAdmin和其他工具可能在这方面需要改进。wbrvyc0a4#
我可能是错的,但我认为最初的帖子是问如何删除一个默认值,而不是添加字符串文字“none”。如果是这样,你可以这样做: