我的数据库表如下所示
+======+===========+============+
| ID | user Name |user surname|
+======+===========+============+
| 100 | name | surname |
| 101 | name | surname |
| 102 | name | surname |
+===============================+
当我运行此查询时,该查询不应显示任何行,因为不存在具有101foo2
值的行:
SELECT * FROM tableName WHERE ID ='101foo2'
我得到的ID不带foo2
字的结果
+======+===========+============+
| ID | user Name |user surname|
+======+===========+============+
| 101 | name | surname |
+===============================+
如果我的查询是101
,它将如何显示ID为ID = '101foo2'
的行
答案 0 :(得分:2)
您正在混合类型。 ID
是整数(或数字)。您正在将其与字符串进行比较。因此,MySQL需要确定用于比较的类型。使用什么类型?好吧,一串?编号字符串将使用前导数字转换为数字。因此,它变成101
并匹配。
您实际上应该只将数字与数字进行比较,将字符串与字符串进行比较。您可以尝试将代码编写为:
SELECT * FROM tableName WHERE ID = 101foo2
但是,您会得到一个错误。另一种可能性是强制转换为字符串:
SELECT * FROM tableName WHERE CAST(ID as CHAR) = '101foo2'