嗨我正在使用 hibernate 和 Mysql。我有一个带有名为“active”的布尔属性的类。
生成的数据库表为BIT数据类型。到目前为止,一切都很好。 我想查询这个值,但我不知道该怎么做。 我试过了
SELECT * from table where active = 1
不起作用,以下也不起作用
SELECT * from table where active = true
我在参考手册和 Stackoveflow 中都没有找到任何内容。
有什么提示吗?
SELECT * FROM table WHERE active = (1)
要指定位值,可以使用 b'value' 表示法。
实际上MySQL有内置的位文字:
select*from table where active = 0b1
您是否尝试过将其转换为整数进行比较
SELECT * from table where cast(active as unsigned) = 1
我大部分时间都使用 MS SQL,所以如果这不起作用,请原谅我,因为我无法测试它。
好吧,对于比较和更新,0 和 1 对我来说都有效:
这里有一个 bit(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
更改了一行...再试一次:
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 适用于 x86_64 上的 debian-linux-gnu ((Debian))