mysql - IN 函数的奇怪结果,id 列表在引号中

标签 mysql

当我运行此代码时,它会按预期返回具有列出的 id 的所有网站

SELECT * FROM `sites` WHERE id IN (142,150,40,42,21,99,162,110,121)

但是这仅返回 id 为 142 的站点。为什么这甚至会返回一些东西?我本来预计会出现错误。

SELECT * FROM `sites` WHERE id IN ("142,150,40,42,21,99,162,110,121")

最佳答案

MySql(正确地)不会查看字符串内部以查看它是否包含看起来像 in 列表的内容。

它只看到一个 in 列表,其中包含一个字符串项目。您可以通过从 stringint 的隐式转换来转换该单个表达式。

但不是做明智的事情并引发错误,因为字符串 "142,150,40,42,21,99,162,110,121" 不是远程有效的整数,而是在第一个非数字字符处停止,并且所以字符串转换为 142

因此您的查询将被评估为in (142)

关于mysql - IN 函数的奇怪结果,id 列表在引号中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37006902/

相关文章:

php - 基于百分位数的颜色代码表单元格

java - 如何在 hibernate 中将条件结果对象插入数据库

php - 如何在不破坏字符集的情况下正确地将网站迁移到新服务器?

java - 在 Left Join 中找不到列

mysql - 从 MySQL 日期时间字段中选择,其中年份不重要

mysql - 在ejabberd中配置mysql连接

c# - SQL批量上传

PHP - 将 PDO 与 IN 子句数组一起使用

mysql - 将数据从一个数据库复制到同一个表中的另一个数据库

MySql 查询 - 对记录进行分组以获得百分比