javaWeb项目中mysql的NULL和空之争

一、引子
在项目中遇到一个奇怪的问题,调用一个更新接口,接口要求对象的一个属性name值为空,就可以更新,但是如果不为空就不能更新。
然后在数据库里,手动把name字段的值清空了,但是调用后依然出错,于是乎开始进一步分析原因。

二、数据库结构

这里写图片描述
如图,其中name是可以为空的。
首先插入一条测试数据,SQL如下图所示

 insert into student values(null,"jianghuiwen",100);

然后更新为空

 update student set name="" where id = 103829; 

查询后,显示如图所示
这里写图片描述

三、客户端测试
客户端采用的是java的代码,代码如图:
这里写图片描述

显示结果是:空。
继续更新为null:

update student set name=null where id = 103829; 

这里写图片描述
继续运行测试,显示结果是:null。

四、接口问题
去寻找接口,发现接口写的是:
这里写图片描述

发现实际上接口只是做了null判断,而如果更新为”“的话,完全是两个不同的值。
所以,在业务逻辑中,要特别注意在mysql中的NULL和空,以及在JAVA代码中分别针对两种的判断。

五、小结
经过测试,当java使用对象插入到数据库的时候,如果某个字段不设置,不使用A.set()方法的话,插入的将是NULL值,而不是空值,空值需要使用A.set(“”)才会是空值,另外mysql中的null和NULL是同样的。

更多请登录网站查看http://www.javaer.com.cn/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值