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
答案 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
SELECT
中SELECT 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)