前言
首先看下面的查询语种
select * from AudioKnowledgeChatInfo where AudioId=297795550566600706;
查询结果如下
看到上面的查询结果,是不是一脸懵?这audioId明显不对啊,怎么查询到了?
原因剖析
首先我们来看看数据库表结构
可以看到,表中AudioId定义是varchar(50),但是查询sql中传入的是数字,很显然这可能是涉及到mysql的隐式类型转换问题了。我们知道mysql在进行字段查询的时候,varchar和int,bigint的比较时,会把varchar类型转换成对应的int或者bigint,这时可能会造成精度丢失,比较不准确问题。
我们把上面的sql修改下
select * from AudioKnowledgeChatInfo where AudioId='297795550566600706';
再次查询下,发现查询不到数据了。
总结
mysql的类型隐式转换,会导致索引失效问题、数据比对异常等问题,所以在表结构设计以及sql编写的时候还是要多加注意,避免这种错误。