【问题标题】:MySQL: return "0" & "1" rather than "false" & "true"MySQL:返回“0”和“1”而不是“假”和“真”
【发布时间】: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

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

【问题讨论】:

标签: sql


【解决方案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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-06
        • 1970-01-01
        • 2011-09-22
        • 2012-12-29
        • 2010-09-25
        • 2018-07-05
        • 2014-09-07
        • 2012-08-27
        相关资源
        最近更新 更多