当枚举字段设置为无效值时,有没有办法让MySQL默认为NULL?
另外,有没有办法可以在HTML表单中指定一个值,这样当保存到DB时,它会存储为NULL。我不想做任何检查,如“if empty string,然后保存NULL”。如果有可能,这是个好主意吗?任何安全问题?
我的场景:我有一个HTML下拉菜单,其中包含一个“null”选项,后跟一个与DB的枚举对应的项目列表。当选择并保存null选项时,我希望它在DB中反映为NULL。现在,它被转换为空字符串,按照:
如果在ENUM中插入无效值(即不是字符串 如果出现在允许值列表中,则插入空字符串 而是作为特殊的错误值。可以区分此字符串 来自“正常”的空字符串,因为该字符串具有 数值0。
答案 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