如何使用MySQL命令行工具默认显示存储为BIT的布尔值

Tou*_*uko 7 mysql select boolean command-line-interface bit

我选择使用MySQL存储为BIT的布尔类型时出现问题.我知道我可以使用SELECT CAST(1 = 1 AS SIGNED INTEGER)或SELECT BOOLFIELD + 0 等自定义查询来显示位值.

但是,有没有办法让命令行客户端以SELECT*FROM TABLE等查询以合理的方式显示我们的布尔值?

更新:目前我只看到结果中的空格示例:

mysql> SELECT distinct foo, foo + 0 from table
+------+-------+
| foo  | foo_0 |
+------+-------+
|      |     0 |  <-- Only space
|     |     1 |   <-- Space, one space less
+------+-------+
Run Code Online (Sandbox Code Playgroud)

对于一些google搜索,我发现了一些(也许相关)从MySQL数据库错误的bug(http://bugs.mysql.com/bug.php?id=28422,http://bugs.mysql.com/bug.php?id = 43670)但没有回答或修复?

egg*_*yal 6

为了存储布尔值,一个真正应该使用MySQL的BOOLEAN类型(这是一个别名TINYINT(1),因为MySQL没有真正的布尔类型):0表示假,非零代表真.

虽然可能觉得在一个字节中存储布尔值比在BIT(1)列中更浪费,但必须记住,一些保存的位将转换为CPU在数据存储和检索上的更多位操作; 我不确定大多数存储引擎是否将BIT列填充到下一个字节边界.

如果您坚持使用BIT类型列,则应注意它们将作为二进制字符串返回.MySQL命令行客户端(愚蠢地)尝试将二进制字符串呈现为文本(通过应用其默认字符集),这是导致您观察到的行为的原因 - 没有办法避免这种情况(除了操纵选择中的字段)列表,以便它返回为二进制字符串以外的其他内容,就像您已经在做的那样).

但是,如果您还坚持使用SELECT *(这是一种不好的做法,虽然从命令行客户端可以理解得更多),您可以考虑定义一个执行操作的视图,然后SELECT从中进行操作.例如:

CREATE VIEW my_view AS SELECT foo + 0 AS foo, bar FROM my_table;
Run Code Online (Sandbox Code Playgroud)

然后人们可以这样做:

SELECT * FROM my_view WHERE foo = 1 AND bar = 'wibble';
Run Code Online (Sandbox Code Playgroud)