当枚举字段设置为无效值时,有没有办法使MySQL默认为NULL?
另外,有没有办法可以在HTML表单中指定一个值,这样当保存到DB时,它会存储为NULL.我不想做任何检查,如"if empty string,然后保存NULL".如果有可能,这是个好主意吗?任何安全问题?
我的场景:我有一个HTML下拉菜单,其中包含一个"null"选项,后跟一个与DB的枚举对应的项目列表.当选择并保存null选项时,我希望它在DB中反映为NULL.现在,它被转换为空字符串,如下所示:
如果在ENUM中插入无效值(即,允许值列表中不存在的字符串),则会插入空字符串作为特殊错误值.通过此字符串具有数字值0的事实,可以将此字符串与"正常"空字符串区分开.
" 如果声明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
归档时间: |
|
查看次数: |
7123 次 |
最近记录: |