9

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
+------+-------+

いくつかのグーグルで、MySQLバグDBからいくつかの(おそらく関連する)バグを見つけました(http://bugs.mysql.com/bug.php?id=28422http://bugs.mysql.com/bug.php?id =43670 ) しかし、回答または修正されていませんか?

4

2 に答える 2

6

ブール値を格納するには、 MySQL の型を使用する必要があります (MySQL には実際ブール型がないBOOLEANため、これは のエイリアスです): 0 は false を表し、ゼロ以外は true を表します。TINYINT(1)

ブール値をバイトに格納するのは列に格納するよりも無駄が多いように感じるかもしれませんがBIT(1)、保存されたいくつかのビットは、データの格納と取得で CPU のより多くのビット操作に変換されることを覚えておく必要があります。BITとにかく、ほとんどのストレージエンジンが列を次のバイト境界までパディングするかどうかはわかりません。

どうしても型列を使用する場合BITは、それらがバイナリ文字列として返されることに注意してください。MySQL コマンド ライン クライアントは (ばかげて) バイナリ文字列を (デフォルトの文字セットを適用することによって) テキストとしてレンダリングしようとします。すでに行っているように、バイナリ文字列以外の何かとして返されるようにリストします)。

ただし、使用することも主張SELECT *する場合(これは悪い習慣ですが、コマンド ライン クライアントからの方が多少理解しやすいですが)、操作が実行されるビューSELECTを定義し、そこからビューを定義することを検討してください。例えば:

CREATE VIEW my_view AS SELECT foo + 0 AS foo, bar FROM my_table;

次に、次のことができます。

SELECT * FROM my_view WHERE foo = 1 AND bar = 'wibble';
于 2013-09-26T06:19:36.627 に答える