MYSQL:比较整数值的子句

MYSQL:比较整数值的子句,mysql,sql,Mysql,Sql,我得到了一个int列,但是当我请求一个带有该子句的select时 其中id='1FR2' 例如,MYSQL返回true,记录id=1 那么MYSQL似乎是忽略还是转换? 强制MYSQL不修剪它的解决方案? 谢谢。这是因为MySQL将字符串转换为整数。因此它取第一个数字并截断所有其他字符串。解决方案首先被强制转换为char,如下所示: WHERE cast(id as char)='1FR2' 为什么要将int与非数字的字符串进行比较?MySQL的强制转换规则将尝试从字符串的左侧获取所有数字字符

我得到了一个int列,但是当我请求一个带有该子句的select时 其中id='1FR2' 例如,MYSQL返回true,记录id=1 那么MYSQL似乎是忽略还是转换? 强制MYSQL不修剪它的解决方案?
谢谢。

这是因为MySQL将字符串转换为整数。因此它取第一个数字并截断所有其他字符串。解决方案首先被强制转换为char,如下所示:

WHERE cast(id as char)='1FR2'

为什么要将int与非数字的字符串进行比较?MySQL的强制转换规则将尝试从字符串的左侧获取所有数字字符。如果该值应为整数,则应在将其传递给查询之前进行验证。谢谢Michael,但我对Mysql强制转换规则有点困惑。当然,所有输入都是验证的,这里的示例是针对请求参数或用户可以在请求之前更改的其他javascript值。然后所有sql查询参数都被转义,我认为这就足够了。现在我明白了,因为mysql规则,我必须验证所有查询参数。这不是一个好消息,谢谢,但我认为mysql在使用cast时会忽略索引。我将尝试一个测试,当然它会忽略索引