web-dev-qa-db-ja.com

Mysql:タイプがビットである列をクエリする方法は?

こんにちは、hibernateとMysqlを使用しています。 「アクティブ」というブール属性を持つクラスがあります。

生成されたデータベーステーブルのデータ型はBITです。ここまでは順調ですね。この値を照会したいのですが、方法がわかりません。私はもう試した

 SELECT * from table where active = 1

動作しません、以下も

 SELECT * from table where active = true

リファレンスマニュアルにもStackoveflowにも何も見つかりませんでした。

ヒントはありますか?

前もって感謝します!

28
Luixv
SELECT * FROM table WHERE active = (1)
39
Peter D

このページ によると、BITはバージョンbefore 5.0.のTINYINT(1)の同義語です。

これらを試しましたか?

SELECT * from table where active = (1)
SELECT * from table where active = 'true'
SELECT * from table where active = b'1'

この ブログエントリ は、BITデータ型を完全に回避することを提案しています。

18
Andomar

実際、MySQLにはビットリテラルが組み込まれています。

select*from table where active = 0b1
7
Pacerier

ビット値を指定するには、b'value '表記を使用できます。

7
dfa

比較のために整数にキャストしてみましたか

SELECT * from table where cast(active as unsigned) = 1

私はほとんどの場合MS SQLを使用しているので、テストできないため機能しない場合は許してください。

7
RoguePlanetoid

まあ、比較と更新の両方で、0と1は私にとってはうまくいきます:

これはタイプbit(1)のフィールドで、1行です。フィールドは現在falseです。

mysql> select isfeatured from nodes where isfeatured = 1;
Empty set (0.00 sec)

mysql> select isfeatured from nodes where isfeatured = 0;
+------------+
| isfeatured |
+------------+
|            |
+------------+
1 row in set (0.00 sec)

Isfeaturedのビット(1)タイプの0から1への変更を更新...

mysql> update nodes set isfeatured=1 where isfeatured = 0;
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

1行が変更されました...もう一度お試しください:

mysql> update nodes set isfeatured=1 where isfeatured = 0;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

期待どおりに変更された行はありません。

以前と同じ選択クエリ:

mysql> select isfeatured from nodes where isfeatured = 1;
+------------+
| isfeatured |
+------------+
|           |
+------------+
1 row in set (0.00 sec)

mysql> select isfeatured from nodes where isfeatured = 0;
Empty set (0.01 sec)

ほら、動作します。

私が使用しています:

mysql Ver 14.14 Distrib 5.5.31、debian-linux-gnu(x86_64)、readline 6.2使用

そして

/ usr/sbin/mysqld Ver 5.5.31-0 + wheezy1 for debian-linux-gnu on x86_64((Debian))

0
Jimi WIlls