こんにちは、hibernateとMysqlを使用しています。 「アクティブ」というブール属性を持つクラスがあります。
生成されたデータベーステーブルのデータ型はBITです。ここまでは順調ですね。この値を照会したいのですが、方法がわかりません。私はもう試した
SELECT * from table where active = 1
動作しません、以下も
SELECT * from table where active = true
リファレンスマニュアルにもStackoveflowにも何も見つかりませんでした。
ヒントはありますか?
前もって感謝します!
SELECT * FROM table WHERE active = (1)
実際、MySQLにはビットリテラルが組み込まれています。
select*from table where active = 0b1
ビット値を指定するには、b'value '表記を使用できます。
比較のために整数にキャストしてみましたか
SELECT * from table where cast(active as unsigned) = 1
私はほとんどの場合MS SQLを使用しているので、テストできないため機能しない場合は許してください。
まあ、比較と更新の両方で、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))