首页 > 技术文章 > MYSQL字符串与数字比较出现的异常

kevinZhu 2021-12-22 17:32 原文

先来例子,仔细感悟

#输出0也就是FALSE
select 0 = '123abc';
#输出123
select cast('123abc' as signed); 
#123abc
select cast('123abc' as char); 

#输出1也就是TRUE
select 0 = 'abc';
#结果输出0
select cast('abc' as signed);

注意 字符串跟数字比较时,会转化为数字,
#如果首字符是数字,那么就保留数字到非数字那一位,首字符是其他的就会转为0
#所以我们比较时要注意类型,如果是不同类型的比较要转换成同一个类型(可以用cast)

 

当然这个情况应该不常见,
第一是一般不用字符串做关联和比较,
第二是比较的两个字段类型不同
我遇到这个属于表设计和历史遗留问题

推荐阅读