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

时间:2012-05-15 13:01:42

标签: mysql html 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

1 个答案:

答案 0 :(得分: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`)
)

您的网络应用程序正在尝试使用类似的内容更新现有记录

UPDATE `test`.`tbl_test` SET `type` = NULL WHERE `tbl_test`.`id` =1

它会将值设置为NULL。

您可以通过在表格中查询下拉列表中可能的ENUM值来降低HMTL下拉列表中出现无效枚举数据的风险。 Here's a Php example I found

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= ...>属性,您可以控制POST给WebApp的值,然后进行相应的处理。在此示例中,WebApp

-1的值转换为NULL