30

嗨,我正在使用休眠和 Mysql。我有一个名为“活动”的布尔属性的类。

生成的数据库表具有 BIT 数据类型。到现在为止还挺好。我想查询这个值,但我不知道该怎么做。我试过了

 SELECT * from table where active = 1

不起作用,以下都不是

 SELECT * from table where active = true

我在参考手册和 Stackoveflow 都没有找到任何东西。

有什么提示吗?

提前致谢!

4

6 回答 6

40
SELECT * FROM table WHERE active = (1)
于 2009-05-08T12:36:48.493 回答
20

根据此页面,对于5.0.3 之前的版本,BIT 是 TINYINT(1) 的同义词。

你试过这些吗?

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

博客条目建议完全避免使用 BIT 数据类型。

于 2009-05-08T12:40:00.203 回答
7

要指定位值,可以使用 b'value' 表示法。

于 2009-05-08T12:38:10.003 回答
7

实际上 MySQL 有内置的位字面量:

select*from table where active = 0b1
于 2012-07-11T17:01:10.697 回答
6

您是否尝试过将其转换为整数进行比较

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

我大部分时间都使用 MS SQL,如果这不起作用,请原谅我,因为我无法测试它。

于 2009-05-08T12:44:06.713 回答
0

好吧,对于比较和更新,0 和 1 对我有用:

这是一个位(1)类型的字段,一行,该字段当前为假:

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,适用于使用 readline 6.2 的 debian-linux-gnu (x86_64)

/usr/sbin/mysqld Ver 5.5.31-0+wheezy1 用于 x86_64 上的 debian-linux-gnu ((Debian))

于 2013-09-07T11:27:48.800 回答