TINYINT (0, 1) 表示 MySQL 中的布尔值


TINYINT (0, 1) for boolean values in MySQL

正如标题所述,MySQL中布尔值的TINYINT(0,1)返回真值和假值,但是当我从数据库中检索TINYINT(0,1)值时,我想要是和没有值。 可能吗??

使用 IF:

SELECT IF(bool_value, 'yes', 'no') as string_value...

tinyint 不返回真或假。它返回 0 或 1。如果你想要是和否,你需要自己指定:

if($return == 0) {
    return "no";
} else {
    return "yes";
}

是的,这是可能的。一种方法是向其添加CASE

SELECT
    CASE
        WHEN value = true THEN 'yes'
        ELSE 'no'
    END
FROM
    `table`;

另一个,正如马克斯建议的那样,添加IF选项。

想要"是"和"否"听起来像是为了显示目的,并且您选择如何格式化数据库/模型中的数据以进行显示应该在面向视图的代码中,而不是数据库架构或查询逻辑,尽管后者有有效的例外。除了诸如"名字"和"姓氏"作为单独的项目是否有用而不是单个"名称"字段等考虑因素之外,有关数据库结构的决策应基于您需要存储的内容以及不同数据项之间的关系,而不是数据在检索后的外观。特别是当你使用框架时,这应该很简单。

也就是说,你可以改用枚举类型,将枚举定义为枚举('no','yes'),尽管蛋糕可能仍然不支持枚举。然后,您可以获取并设置字符串值或数字值(1 和 2,或减去 1 得到 0 和 1)。总的来说,值为 0 和 1 的 tinyint 可能更可取,因为它是传统的,现在或将来不太可能导致错误/错误。

使用 AppModel::afterFind

http://book.cakephp.org/2.0/en/models/callback-methods.html#afterfind

public function afterFind($results, $primary = false) {
  foreach ($results as $index => $row) {
    if (isset($row[$this->alias]['yes_or_no'])) {
      $results[$index][$this->alias]['yes_or_no'] = $row[$this->alias]['yes_or_no'] ? 'yes' : 'no';
    }
  }  
  return $results;
}