55

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

该表有多行带有enabled = b'0',多行带有enabled = b'1'

但是,这两个:

SELECT * from my_table WHERE enabled = b'0';

还有这个:

SELECT * from my_table WHERE enabled = b'1';

enabled列中显示空白:

+----+---------+
| id | enabled |
+----+---------+
|  1 |         |
|  2 |         |
+----+---------+

这是为什么?我怎么能看到该enabled字段的值?


$ mysql --version
mysql  Ver 14.14 Distrib 5.1.63, for debian-linux-gnu (x86_64) using readline 6.1

4

7 回答 7

92

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

让我们插入以下值:

INSERT INTO `my_table` (`ID`, `enabled`)
VALUES (1,b'1'),(2,b'0');

然后选择它们进行归档:

mysql> SELECT * FROM my_table INTO OUTFILE '/tmp/my_table.txt' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';

首先让我们/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

这将产生以下输出:

+----+---------+
| id | enabled |
+----+---------+
|  1 |       1 |
|  2 |       0 |
+----+---------+
2 rows in set (0.00 sec)
于 2013-01-10T01:20:07.000 回答
30

另一种方法是

SELECT enabled+0 from my_table
于 2016-05-19T10:48:27.940 回答
27

最简单的方法是ORD函数:

SELECT ORD(`enabled`) AS `enabled` FROM `my_table`
于 2015-09-06T07:08:58.830 回答
5

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

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

于 2016-09-05T03:36:44.903 回答
0

你也可以试试SELECT enabled&1 from my_table

于 2019-01-01T19:44:41.347 回答
0

采用HEX()

像: SELECT id, HEX(enabled) AS enabled FROM my_table

于 2020-10-20T13:32:18.640 回答
0

要将位字段值转换为人类可读的字符串,请使用内置的EXPORT_SET函数,将位(1)类型的列转换为“Y”或“N”值的简单示例是

EXPORT_SET(column, 'Y', 'N')

您还可以将 bit(8) 值转换为字节的二进制表示

EXPORT_SET(column, '1', '0', '', 8)
于 2021-01-22T14:31:44.017 回答