当枚举字段设置为无效值时,使MySQL默认为NULL

Sta*_*bie 2 html mysql sql

当枚举字段设置为无效值时,有没有办法使MySQL默认为NULL?

另外,有没有办法可以在HTML表单中指定一个值,这样当保存到DB时,它会存储为NULL.我不想做任何检查,如"if empty string,然后保存NULL".如果有可能,这是个好主意吗?任何安全问题?

我的场景:我有一个HTML下拉菜单,其中包含一个"null"选项,后跟一个与DB的枚举对应的项目列表.当选择并保存null选项时,我希望它在DB中反映为NULL.现在,它被转换为空字符串,如下所示:

如果在ENUM中插入无效值(即,允许值列表中不存在的字符串),则会插入空字符串作为特殊错误值.通过此字符串具有数字值0的事实,可以将此字符串与"正常"空字符串区分开.

http://dev.mysql.com/doc/refman/5.5/en/enum.html

Bra*_*rad 5

" 如果声明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`)
)
Run Code Online (Sandbox Code Playgroud)

并且您的Web应用程序正在尝试使用类似的东西更新和现有记录

UPDATE `test`.`tbl_test` SET `type` = NULL WHERE `tbl_test`.`id` =1
Run Code Online (Sandbox Code Playgroud)

它将值设置为NULL.

您可以通过在表格中查询下拉列表中可能的ENUM值来降低HMTL下拉列表中出现无效枚举数据的风险.这是我发现的一个Php例子

SHOW COLUMNS FROM `tbl_test` WHERE Field = 'type'
Run Code Online (Sandbox Code Playgroud)

[编辑]

要回答您的其他注释,如果您希望用户能够选择NULL值并允许空字符串作为有效值,您需要像这样指定下拉列表

<select>
  <option value="-1">-- not selected ---</option>
  <option value=""></option>
  <option value="Book">Book</option>
  <option value="Music">Music</option>
</select>
Run Code Online (Sandbox Code Playgroud)

通过使用该<option value= ...>属性,您可以控制POST给WebApp的值,然后可以相应地进行处理.在此示例中-1,WebApp将值转换为NULL