where 子句中带有字符的整数字段返回奇怪的输出

Posted

技术标签:

【中文标题】where 子句中带有字符的整数字段返回奇怪的输出【英文标题】:Integer field with character in where clause returns strange output 【发布时间】:2014-11-03 18:06:10 【问题描述】:

我在表中有一个数据类型为 tiny int 的列。它的值像 1 和 0。我尝试了一个选择查询作为

SELECT * from table_name where filed_name = 'Y'; 

这会导致所有记录为零。我不明白查询执行是如何发生的。请帮助我理解这一点

【问题讨论】:

***.com/questions/10852337/true-false-vs-0-1-in-mysql true 和 false 是 1 和 0 的同义词,请参阅上一个问题 我需要从我的问题中了解,整数字段与字符比较如何返回 true(1)。如果您尝试上述查询,因为 'Select field_name = 'Y' from table_name' 将返回 1 作为结果。 【参考方案1】:

string 转换为number 时,它变成了0 的值。 这就是为什么您会获得所有价值为 0

的记录
SELECT * from table_name where filed_name = 'Y';

这里'Y'自动转换为0

改为使用

SELECT * from table_name where filed_name = 1;

【讨论】:

感谢 vikrant singh,现在我明白了。非常感谢【参考方案2】:

TINYINT 不存储 'Y''N' 之类的字符串值,它存储整数 01。如果您想要所有值为“Y”的数据行,则必须按 1(整数)进行过滤,例如:

SELECT * FROM myTable WHERE myTinyColumn = 1

【讨论】:

以上是关于where 子句中带有字符的整数字段返回奇怪的输出的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.8,在 where 子句中带有 Count(*) 的棘手子查询

Hive 中带有 Join 或 Where 子句的条件

WHERE 子句中带有子查询的 MYSQL UPDATE 查询 - 优化

MySQL:在 WHERE 子句中带有 NOT IN 的从属子查询非常慢

为啥以及何时在 WHERE 子句中带有条件的 LEFT JOIN 不等于在 ON 中的相同 LEFT JOIN? [复制]

PostgreSQL:使用 LIKE、ANY 和通配符的 Where 子句