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

时间:2013-01-09 23:50:00

标签: 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';

和此:

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

7 个答案:

答案 0 :(得分:67)

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

允许插入以下值:

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 SELECTSELECT id, CAST(enabled AS UNSIGNED) AS enabled FROM my_table {/ 1>}

+----+---------+
| id | enabled |
+----+---------+
|  1 |       1 |
|  2 |       0 |
+----+---------+
2 rows in set (0.00 sec)

这将产生以下输出:

{{1}}

答案 1 :(得分:20)

最简单的方法是ORD函数:

SELECT ORD(`enabled`) AS `enabled` FROM `my_table`

答案 2 :(得分:19)

另一种方法是

SELECT enabled+0 from my_table

答案 3 :(得分:4)

  

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

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

答案 4 :(得分:0)

您也可以尝试SELECT enabled&1 from my_table

答案 5 :(得分:0)

使用HEX()

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

答案 6 :(得分:0)

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

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

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

EXPORT_SET(column, '1', '0', '', 8)