質問

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

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

 SELECT * from table where active = 1

機能しない、次のいずれでもない

 SELECT * from table where active = true

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

何かヒントはありますか?

事前に感謝します!

役に立ちましたか?

解決

SELECT * FROM table WHERE active = (1)

他のヒント

このページ、BIT 5.0.3より前のバージョンのTINYINT(1)の同義語です。

これらを試しましたか?

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

このブログエントリは、 BITデータ型を完全に避けてください。

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

比較のために整数にキャストしようとしましたか

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

ほとんどの場合MS SQLを使用しているので、テストできないのでこれが機能しない場合はご容赦ください。

実際、MySQLには組み込みのビットリテラルがあります:

select*from table where active = 0b1

まあ、比較と更新の両方で、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で0から1に変更して更新します。これはbit(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、readline 6.2を使用したdebian-linux-gnu(x86_64)用

and

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top