例如:
表:user
列:user_id
(类型为int)
SELECT * FROM user WHERE user_id = '10xyz'
给出了相同的结果
SELECT * FROM user WHERE user_id = '10'
输入值不是整数,但在这种情况下不会出错。
答案 0 :(得分:10)
您获得相同结果的原因是MySQL
自动从字符串中删除尾随字符,而隐式地将转换为整数。
答案 1 :(得分:3)
如果您不想更改所有代码,但是您的数据库查询都通过一个或几个子代码,那么您可以更改这些代码以在使用语句句柄后检查警告(例如if ( $sth->{mysql_warning_count} ) ...
)。
或者您可以创建一个自动为您执行此操作的DBI子类,从而促进对错误的警告。如果你这样做,许多其他人都会使用这种东西。在更新或向整数字段中插入诸如“10xyz”之类的东西时,有一些配置设置可以给出错误而不是警告,但是没有比这更宽泛的东西,亲爱的Oracle认为它Not a Bug。也许MariaDB做得(或可能做得更好)?
答案 2 :(得分:1)
user_id的数据类型在数据库中是INT
为什么它提供相同的输出而不是错误