【发布时间】:2016-02-01 10:56:43
【问题描述】:
我在 MySQL 中有一张表,其结构如下:
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(32) | YES | | NULL | |
| bit | bit(1) | NO | | b'0' | |
+-------+------------------+------+-----+---------+----------------+
我插入一条记录如下:
+----+-------------+-----+
| id | name | bit |
+----+-------------+-----+
| 1 | john | |
+----+-------------+-----+
然后我用一个PHP脚本来选择它,脚本如下:
$pdo = new PDO("mysql:host=127.0.0.1;port=3306;dbname=Test", "username","password");
$sql = "SELECT * FROM `for_test` WHERE `name` = :name";
$stmt = $pdo->prepare($sql);
$stmt->execute([':name' => 'john']);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
var_dump((boolean)$row['bit']);
}
我希望输出应该是
bool(false)
但是,输出是
bool(true)
为什么 bit 0 会转换为 'true'?
【问题讨论】:
-
var_dump($row['bit']) -
你为什么还要称列
bit。这就像给狗命名dog。 -
感谢@AbraCadaver。 var_dump($row['bit']) 输出字符串(1) ""。并且 var_dump(empty($row['bit'])) 输出 bool(false) 这意味着 $rows['bit'] 非空或非零。因此,如果 $row['bit'] 转换为布尔值,则它等于 'TURE',因为任何非零值都应被视为 'true'。 (参考文档 PHPempty())。但我很想知道 string(1) "" 是如何存储的。