MySQL:返回“0”和“1”而不是“假”和“真”

Posted

技术标签:

【中文标题】MySQL:返回“0”和“1”而不是“假”和“真”【英文标题】:MySQL: return "0" & "1" rather than "false" & "true" 【发布时间】:2016-06-12 13:27:39 【问题描述】:

我需要返回truefalse 而不是10,使用以下查询:

select if(u.id is null,false,true) status
from user u
limit 10

上述查询返回值为 0 或 1 的 status 而不是 truefalse

有没有办法解决这个问题?

【问题讨论】:

见9.1.5 Boolean Literals。 True/False vs 0/1 in mysql 【参考方案1】:

我刚刚在 lua 中遇到了类似的问题。出于某种原因,如果表列类型是“tinyint”并且您调用 1 或 0,它将返回 true 和 false。如果将列类型更改为“int”,它将在 lua 中调用并返回 1 和 0。

旧帖子,但我希望这对某人有帮助!

【讨论】:

【参考方案2】:

如果需要,您可以将值作为字符串返回:

SELECT IF(u.id IS NULL, 'false', 'true') as status
FROM user u
LIMIT 10

【讨论】:

但这些是字符串,不是真/假 有没有办法将它们返回为true & false 而无需将它们转换为字符串? 返回字符串将需要来自接收方的更多处理程序【参考方案3】:

MySQL 没有布尔数据类型,因此您需要在 MySQL 端坚持使用 0 和 1:

select if(u.id is null, 0, 1) status_int
from user u
limit 10

如果你更喜欢 php 中的布尔值而不是 0/1,你可以像这样转换它:

$status = (bool) $status_int;

【讨论】:

【参考方案4】:

TRUE/FALSE 相当于 1/0。这只是你的前端如何显示它的问题。

如果您需要返回字符串“true”和“false”(我不建议这样做 - 在显示中处理),那么您也必须考虑到这一点:

IF(IF(u.id ISNULL,false,true) = 1, 'TRUE', 'FALSE')

【讨论】:

有没有办法将它们返回为true & false 而无需将它们转换为字符串? 正如我所说,1/0 真/假,所以您的原始语句已经将它们返回为真/假。这只是你想在前端做什么的问题。我会尝试将其保留为 true/false 并且 not 将其转换为字符串。让您的前端或其他代码处理它对 1/0(真/假)的作用。【参考方案5】:

IF()

您缺少单引号。

select if(u.id is null,'false','true') status
from user u
limit 10;

【讨论】:

以上是关于MySQL:返回“0”和“1”而不是“假”和“真”的主要内容,如果未能解决你的问题,请参考以下文章

重击“如果 [假];”返回真而不是假——为啥?

Php fetch 返回字符串而不是布尔“真/假”值

python如何“否定”值:如果真返回假,如果假返回真

(14)awk布尔值比较和逻辑运算

Pandas 映射将所有值返回为 NaN [重复]

python中多类数据的真阳性率和假阳性率(TPR,FPR)[重复]