关于Mysql数据检索时隐式转换导致的错误问题

mysql作为免费数据库,在应用中一直备受程序员青睐。最近做一个项目时遇到mysql检索过程中首次遇检索结果跟预期不同问题,经过在网络上检索确定是隐式转换问题,在此记录一下,希望可以帮到遇到同样问题的小伙伴。
本来业务逻辑很简单,查询的device_info中是否有该设备信息,有则跳过,没有则新增。但实际应用时发现查询出结果异常。
错误语法
经过查询是上述检索指令并不存在显示语法错误,是查询时deviceId和表中存储的deviceId格式不同,触发隐式转换,导致查询结果异常。
deviceId在查询指令中类型是数据,在表中类型是varchar
正确的语法结果是:
正确语法
为了避免上述问题发生,在写sql语句时要更加注意类型、字符集、校对规则等的一致性。

附mysql隐式转换规则:
1、两个参数至少有一个是 NULL 时,比较的结果也是 NULL,例外是使用 <=> 对两个 NULL 做比较时会返回 1,这两种情况都不需要做类型转换
2、两个参数都是字符串,会按照字符串来比较,不做类型转换
3、两个参数都是整数,按照整数来比较,不做类型转换
4、十六进制的值和非数字做比较时,会被当做二进制串
5、有一个参数是 TIMESTAMP 或 DATETIME,并且另外一个参数是常量,常量会被转换为 timestamp
6、有一个参数是 decimal 类型,如果另外一个参数是 decimal 或者整数,会将整数转换为 decimal 后进行比较,如果另外一个参数是浮点数,则会把 decimal 转换为浮点数进行比较
7、所有其他情况下,两个参数都会被转换为浮点数再进行比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值