使用SELECT时无法看到MySQL BIT字段值

Mis*_*hko 43 mysql sql bit

my_table包含enabled定义为的字段:enabled BIT NOT NULL DEFAULT 0.

此表有多行enabled = b'0',多行enabled = b'1'.

但是,这两个:

SELECT * from my_table WHERE enabled = b'0';
Run Code Online (Sandbox Code Playgroud)

还有这个:

SELECT * from my_table WHERE enabled = b'1';
Run Code Online (Sandbox Code Playgroud)

enabled列中显示空白:

+----+---------+
| id | enabled |
+----+---------+
|  1 |         |
|  2 |         |
+----+---------+
Run Code Online (Sandbox Code Playgroud)

这是为什么?我怎么能看到该enabled领域的价值?


$ mysql --version
mysql  Ver 14.14 Distrib 5.1.63, for debian-linux-gnu (x86_64) using readline 6.1
Run Code Online (Sandbox Code Playgroud)

pet*_*erm 70

您无法在终端中看到它的原因是因为位值是不可打印的字符.

让我们插入以下值:

INSERT INTO `my_table` (`ID`, `enabled`)
VALUES (1,b'1'),(2,b'0');
Run Code Online (Sandbox Code Playgroud)

然后选择它们归档:

mysql> SELECT * FROM my_table INTO OUTFILE '/tmp/my_table.txt' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
Run Code Online (Sandbox Code Playgroud)

首先让我们/tmp/my_table.txt以纯文本格式查看文件:

"1",""
"2",""

然后在十六进制视图中:

22 31 22 2C 22 01 22 0A 22 32 22 2C 22 00 22 0A

为了能够看到这些值,您可以简单地将CAST它们放入SELECT:

SELECT id, CAST(enabled AS UNSIGNED) AS enabled FROM my_table
Run Code Online (Sandbox Code Playgroud)

这将产生以下输出:

+----+---------+
| id | enabled |
+----+---------+
|  1 |       1 |
|  2 |       0 |
+----+---------+
2 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

  • 使用`select * from my_table`时如何启用/查看? (2认同)

L-S*_*els 22

你可以做到的另一种方法是

SELECT enabled+0 from my_table
Run Code Online (Sandbox Code Playgroud)


علی*_*رضا 21

最简单的方法是ORD功能:

SELECT ORD(`enabled`) AS `enabled` FROM `my_table`
Run Code Online (Sandbox Code Playgroud)


小智 5

位值作为二进制值返回。要以可打印的形式显示它们,请添加 0 或使用 BIN() 等转换函数。

https://dev.mysql.com/doc/refman/5.7/en/bit-field-literals.html