关于mysql中int字段传入字符串查询引发的问题

昨天工作的时候,一位同事遇到了一个很奇怪的问题,让我过去看一下,刷新了我对mysql的认知:)...具体什么问题呢,如下图

关于mysql中int字段传入字符串查询引发的问题_第1张图片

 我带入的ofirst条件是一串UUID,但是查询出值为100的结果,知识库明显不够用。

苦思了好几分钟,无从下手。然后我们部门的经理过来了,就问了一下他,他看了一眼就发现了问题的所在,打开表结构一看。

 

这个字段居然是int类型的,原来mysql会隐式转换,int类型的字段传入字符串会截取从第一位int型开始到第一个非int型的值作为条件。例如where a=35abc 相当于 where a = 35,再如where a = b35c 相当于where a = 0,在上面途中的uuid第一位为0,但是刚好1e2是一个数学运算氏,科学计数法,1e2=100。所以也就查出来了100的结果,可以说是相当的巧妙了,但是这也提醒了我们在数据库表结构设计上的问题,这个字段应该设计为varchar类型。

吃一堑长一智,下次再碰到这样的问题就不会无从下手了。

你可能感兴趣的:(技术分享)