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'
之类的字符串值,它存储整数 0
或 1
。如果您想要所有值为“Y”的数据行,则必须按 1(整数)进行过滤,例如:
SELECT * FROM myTable WHERE myTinyColumn = 1
【讨论】:
以上是关于where 子句中带有字符的整数字段返回奇怪的输出的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.8,在 where 子句中带有 Count(*) 的棘手子查询
WHERE 子句中带有子查询的 MYSQL UPDATE 查询 - 优化
MySQL:在 WHERE 子句中带有 NOT IN 的从属子查询非常慢
为啥以及何时在 WHERE 子句中带有条件的 LEFT JOIN 不等于在 ON 中的相同 LEFT JOIN? [复制]