12

目前我正在使用在我的 MySQL 数据库Tinyint(1)中指示Boolean值,我真的不喜欢这样。那么,我如何在我的数据库中存储和检索Boolean值呢?MySQLPHP

如何在WHERE子句中使用它以及如何在INSERT, UPDATE查询中正确分配值?

当我在 PHP 上恢复它时,它是TRUE, true,或者简单地说1,如果我要检查它===

Tinyint(1)当您从 迁移到时,您是否也遇到过任何问题BOOLEAN

提前致谢。:)

更新:

我知道这Tinyint(1)与 相同Boolean,但是我想处理Boolean数据类型而不是Tinyint(1). 这就是我问这个问题的原因。

4

2 回答 2

22

MySQL 没有布尔数据类型。Tinyint(1) 非常接近。在 PHP 中使用它很简单。

If (1) echo 'true'; // is the same as if (true)
// Just as
if (0) echo 'false'; // is the same as if (false)

如果你真的想要一个布尔值,你可以这样做

// $mysql_data is tinyint value from db
$boolean = $mysql_data ? true : false;
// Now you have your boolean as $boolean
于 2012-09-30T11:27:24.243 回答
4

使用布尔值,不要使用=== FALSE- 该值已经是布尔值(除非函数要求您使用===,如strpos())。该值是布尔值 - 从技术上讲,它是一个整数,但 PHP 是一种动态语言,所以它不是问题。

考虑preg_match()函数 - 它返回匹配数(整数)。

你愿意这样写吗?

if (preg_match('/\bregexp?\b/', $variable) === 1)

或者那个?

if (preg_match('/\bregexp?\b/', $variable))

显然,没有显式的方式=== 1更好。你问它是否匹配,而不是它是否有 0 个匹配。另外,如果您认为这样=== 1更安全,为什么不这样做=== 1 === TRUE呢?

当然,可以使用(bool)or将值转换为布尔值!!

此外,在某些语言(例如 C 或 Perl)中,布尔值和数字之间没有区别。它只是工作。

于 2012-09-30T11:22:26.820 回答