我的MySQL
数据库上有一个名为membertable
的表。该表包含两个字段,分别是memberid
和membername
。 memberid
字段的类型为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/