我的MySQL数据库上有一个名为membertable的表。该表包含两个字段,分别是memberidmembernamememberid字段的类型为integer,并使用从2001开始的auto_increment函数。 membername表的类型为varchar

membertable具有两个具有如上所述相同顺序的记录。记录如下所示:

会员编号:2001
会员名:约翰·史密斯

会员编号:2002
会员名:威尔·史密斯

当我对SELECT字段运行memberid语句时,发现了一些奇怪的东西。运行以下语句:

SELECT * FROM `membertable` WHERE `memberid` = '2001somecharacter'


它返回了第一个数据。

为什么会这样呢?没有memberid = 2001somecharacter的记录。看起来MySQL仅搜索前4个字符(2001),当找到相关数据(即上面返回的数据)时,它将拒绝其余字符。

怎么会这样有没有办法关闭这种行为?

-

membertable使用innodb引擎

最佳答案

发生这种情况是因为mysql尝试将“ 2001somecharacter”转换为返回2001的数字。

由于您要将数字与字符串进行比较,因此应使用

SELECT * FROM `membertable` WHERE CONVERT(`memberid`,CHAR) = '2001somecharacter';


避免这种行为。

或正确执行此操作,不要将搜索变量放在引号中,以使其必须为数字,否则由于语法错误而将其分解,然后在传递查询之前确保其为数字。

sqlfiddle

关于mysql - 尽管where子句中的给定值为false,但Select语句仍返回数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36819601/

10-12 17:20