使用 SELECT 时看不到 MySQL BIT 字段值

Posted

技术标签:

【中文标题】使用 SELECT 时看不到 MySQL BIT 字段值【英文标题】:Can't see MySQL BIT field value when using SELECT 【发布时间】:2012-12-24 06:53:53 【问题描述】:

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

【问题讨论】:

你为什么用BIT而不是BOOLEAN?您是否需要在该列中存储多个标志? 这很奇怪。我无法重现那个。作品here 【参考方案1】:

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

让我们插入以下值:

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

要查看这些值,您只需在SELECTCAST 它们:

SELECT id, CAST(enabled AS UNSIGNED) AS enabled FROM my_table

这将产生以下输出:

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

【讨论】:

感谢您的精彩解释! 使用select * from my_table时如何启用/查看? 对于后面的任何人,您不能对从表中选择 * 执行此操作。你需要列出所有你想要的字段。【参考方案2】:

最简单的方法是ORD函数:

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

【讨论】:

【参考方案3】:

另一种方法是

SELECT enabled+0 from my_table

【讨论】:

【参考方案4】:

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

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

【讨论】:

选择 BIN(b'1');返回 0【参考方案5】:

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

【讨论】:

【参考方案6】:

使用HEX()

喜欢: SELECT id, HEX(enabled) AS enabled FROM my_table

【讨论】:

【参考方案7】:

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

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

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

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

【讨论】:

以上是关于使用 SELECT 时看不到 MySQL BIT 字段值的主要内容,如果未能解决你的问题,请参考以下文章

Bit data type

MYSQL SQL语句技巧初探

MySql Bit字段查询的奇怪问题

MySQL 使用客户端以及SELECT 方式查看 BLOB 类型字段内容总结

MySql多表查询

在不同操作系统上处理 MySQL 的 BIT 数据类型