博客列表 >mysql新增纪录中某设有默认值的字段为null

mysql新增纪录中某设有默认值的字段为null

兰岚的博客
兰岚的博客原创
2021年11月05日 11:14:43904浏览

项目基本环境springmvc+mybatis+mysql。

问题出现

mysql中新增一条纪录,status字段值为null,导致按status条件查询给前端时,纪录遗漏。

问题排查

mysql数据库中对字段status,设置了默认值0,没有设置为非null(防止mybaits空值报错)。

mysql默认值没有起作用?

将mapper中新增语句中的status部分去掉,发现默认值出现了。分析并非默认值没起作用,而是insert语句中的null值将mysql中的默认值给覆盖了。

  1. <insert id="add" parameterType="com.tongdatech.sys.domain.OneDay">
  2. insert into t_styd_one_day (
  3. id,fname,price,<!--status-->)values (
  4. #{id,jdbcType=VARCHAR}
  5. ,#{fname,jdbcType=VARCHAR}
  6. ,#{price,jdbcType=NUMERIC}
  7. <!--,#{status,jdbcType=INTEGER}-->
  8. )
  9. </insert>

jsp页面中没有提交status值?

查看jsp页面status为选择框没有””选项,表单提交后端的值应为0或1,为何出现null。(insert语句还原)
表单F12>Network中,新增记录发现status字段提交为空。字段名确认无误,选择“是”提交为空status:,尝试选择“否”提交成功status:1。
分析value值这里不能为0。修改value值为字符后,status能正常提交,正常写入mysql。{‘text’:’是’,’value’:’0’},{‘text’:’否’,’value’:’1’}

  1. <div class="form-group">
  2. <label style="width: 100px;"> 是否上架: </label>
  3. <input type="text" name="status" class="easyui-combobox" data-options="data:[{'text':'是','value':0},{'text':'否','value':1}]" style="width: 200px;"/>
  4. </div>
  5. ......
  6. function saveData() {
  7. $.sys.fmSubmit("#fm", url, undefined, function () {
  8. $("#dlg").dialog("close");
  9. $("#data1").datagrid("reload");
  10. }, "#addBtn");
  11. }

小结

mysql中设置了字段默认值时,insert语句中要注意避免null值覆盖默认值。
页面选择框中选项值””与0,这里提交效果是一样的,均为空,到后端对象收参看到的就是null。
数据库中null与’’的差异:查询时null值字段不会出现。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议