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)但没有回答或修复?
为了存储布尔值,一个真正应该使用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)
归档时间: |
|
查看次数: |
2659 次 |
最近记录: |