MySQL数字类型查询的注意事项


由于工作的疏忽,导致了一个问题,问题具体不太好描述,语言表达能力有待提高鸭。。。

话不多说,直接上图

表里的数据是这样的:
在这里插入图片描述
表结构是这个鬼样子的:
在这里插入图片描述
当我写了一条这样的sql(其实是因为我代码写错导致的5555):

select *from `table` where id in ('[1','2','3]')

一般来讲,下意识会认为1和3都已经跪了,只能查出2来,对吧。因为,in 相当于是多次 = 嘛。
但是这个结果确实这样的:在这里插入图片描述
你会发现只有1不见了,3并没有受到影响。

寻找真谛

那如果这个sql是这样:

select *from `table` where id = '3feso[2'

如此诡异的一句sql,居然还是查出3来了。


很纳闷啊,=不是精确匹配么,为啥后面有那么多诡异的字符还能查出来?
如果换成 varchar类型的呢,再试试:
在这里插入图片描述
好像这次看起来才没问题。

总结

当字段类型属于字符串类型时,where条件=才是精确匹配,当多出任意字符(空格除外)时,就会匹配不到。


当字段类型属于数字类型(例如:int,bigint,double…)时,where条件= 这个地方写数字类型那么就是精确匹配,如果是使用字符串类型 ‘1’ 去匹配时,那么会从非数字字符开始往后全部忽略,如:‘1[1’,这时查出来的就是id为1的记录,后面的 [1 就会被忽略掉。


注: 当有这种情况时,应该在进入sql之前,在mapper的参数列表中就强制使用对应的数字类型,避免使用string类型,这样就能避免传入字符串导致查不到的问题了(如果凑巧取到没暴露出来还行,此处属于隐性bug)。



工作的时候可千万别打瞌睡

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JustDoSelf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值