使用 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
要查看这些值,您只需在SELECT
CAST
它们:
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 字段值的主要内容,如果未能解决你的问题,请参考以下文章