"如果 ENUM 列被声明为允许 NULL,则 NULL 值是该列的有效值,默认值为 NULL。如果 ENUM 列被声明为 NOT NULL,则其默认值为允许列表的第一个元素价值观。 ”
在此基础上,如果您不使用 INSERT 语句为该字段设置值,并且您已声明 ENUM 字段接受 NULL,则它将默认为 NULL。
[编辑]
为了解决您的评论,如果您有此表定义
CREATE TABLE IF NOT EXISTS `tbl_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` enum('New','Done') DEFAULT NULL,
PRIMARY KEY (`id`)
)
并且您的 Web 应用程序正在尝试使用类似这样的方式更新和现有记录
UPDATE `test`.`tbl_test` SET `type` = NULL WHERE `tbl_test`.`id` =1
它将值设置为 NULL。
您可以通过在下拉列表中查询表中可能的 ENUM 值来降低无效枚举数据出现在 HMTL 下拉列表中的风险。这是我发现的一个 PHP 示例
SHOW COLUMNS FROM `tbl_test` WHERE Field = 'type'
[编辑]
要回答您的附加评论,如果您希望用户能够选择 NULL 值并允许空字符串作为有效值,您需要像这样指定您的下拉列表
<select>
<option value="-1">-- not selected ---</option>
<option value=""></option>
<option value="Book">Book</option>
<option value="Music">Music</option>
</select>
通过使用该<option value= ...>
属性,您可以控制 POSTed 到您的 WebApp 的值,然后可以进行相应的处理。在此示例中-1
,您的 WebApp 会将 的值转换为 NULL