【问题标题】:Can't see MySQL BIT field value when using SELECT使用 SELECT 时看不到 MySQL BIT 字段值
【发布时间】: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

标签: mysql sql bit


【解决方案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)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-04-03
            • 1970-01-01
            • 2011-02-11
            • 1970-01-01
            • 1970-01-01
            • 2014-04-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多