我在MySQL中有一个表,其结构如下:
T2.tnumber
我插入一条记录如下:
+-------+------------------+------+-----+---------+----------------+
| 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' | |
+-------+------------------+------+-----+---------+----------------+
然后我使用PHP脚本来选择它,脚本如下:
+----+-------------+-----+
| id | name | bit |
+----+-------------+-----+
| 1 | john | |
+----+-------------+-----+
我希望输出应该是
$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)
为什么第0位转换为'true'?
答案 0 :(得分:0)
仔细观察,您会发现var_dump()
的输出显示字符串 length 为1,不是0。它包含一个字符,因此它不是一个空字符串,因此empty()
和其他布尔比较将其评估为true
。
关于什么是这个字符……令人惊讶的是,至少PhP 5.4和MySQL 5.5,它是NUL
字符!是,ASCII 0、0x00