SQL WHERE 子句中的查询问题,此 returns 所有以
SQL query problem in WHERE clause, this returns all that start with
我已将以下 SQL 查询写入 return 所有“id”等于 2 的站点。
SELECT * FROM `sites` WHERE id = '2'
而且效果很好。问题是,即使我像这样在“2”之后添加一些字符:
SELECT * FROM `sites` WHERE id = '2etyupp-7852-trG78'
它return与上面的结果相同。
如何避免这种情况?也就是说在第二个查询中 return none ?
谢谢
原因是您在混合类型:
where id = '2'
------^ number
-----------^ string
SQL 引擎应该做什么?好吧,标准方法是将 string 转换为 number。所以这是 运行 作为:
where id = 2
当字符串不是数字时会发生什么?在大多数数据库中,您会遇到类型转换错误。但是,MySQL 进行 隐式转换 ,将前导数字转换为数字。因此,您的第二个字符串刚好出现 2
.
由此,希望大家学会不要混用数据类型。将数字与数字进行比较。将字符串与字符串进行比较。
我已将以下 SQL 查询写入 return 所有“id”等于 2 的站点。
SELECT * FROM `sites` WHERE id = '2'
而且效果很好。问题是,即使我像这样在“2”之后添加一些字符:
SELECT * FROM `sites` WHERE id = '2etyupp-7852-trG78'
它return与上面的结果相同。
如何避免这种情况?也就是说在第二个查询中 return none ?
谢谢
原因是您在混合类型:
where id = '2'
------^ number
-----------^ string
SQL 引擎应该做什么?好吧,标准方法是将 string 转换为 number。所以这是 运行 作为:
where id = 2
当字符串不是数字时会发生什么?在大多数数据库中,您会遇到类型转换错误。但是,MySQL 进行 隐式转换 ,将前导数字转换为数字。因此,您的第二个字符串刚好出现 2
.
由此,希望大家学会不要混用数据类型。将数字与数字进行比较。将字符串与字符串进行比较。