选择查询返回false结果

时间:2013-02-04 06:03:04

标签: mysql sql perl select

例如:

表:user

列:user_id(类型为int)

SELECT * FROM user WHERE user_id = '10xyz' 

给出了相同的结果

SELECT * FROM user WHERE user_id = '10'

输入值不是整数,但在这种情况下不会出错。

3 个答案:

答案 0 :(得分:10)

您获得相同结果的原因是MySQL自动从字符串中删除尾随字符,而隐式地将转换为整数。

答案 1 :(得分:3)

如果您不想更改所有代码,但是您的数据库查询都通过一个或几个子代码,那么您可以更改这些代码以在使用语句句柄后检查警告(例如if ( $sth->{mysql_warning_count} ) ... )。

或者您可以创建一个自动为您执行此操作的DBI子类,从而促进对错误的警告。如果你这样做,许多其他人都会使用这种东西。在更新或向整数字段中插入诸如“10xyz”之类的东西时,有一些配置设置可以给出错误而不是警告,但是没有比这更宽泛的东西,亲爱的Oracle认为它Not a Bug。也许MariaDB做得(或可能做得更好)?

答案 2 :(得分:1)

user_id的数据类型在数据库中是INT

为什么它提供相同的输出而不是错误