Mysql:如何查询类型为bit的列?

时间:2009-05-08 12:34:31

标签: mysql select bit

您好我正在使用hibernate和Mysql。我有一个名为'active'的布尔属性的类。

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

 SELECT * from table where active = 1

不起作用,以下

 SELECT * from table where active = true

我在参考手册和Stackoveflow中都没有找到任何内容。

任何提示?

提前致谢!

6 个答案:

答案 0 :(得分:38)

SELECT * FROM table WHERE active = (1)

答案 1 :(得分:18)

根据this page,对于版本 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'

blog entry建议完全避免使用BIT数据类型。

答案 2 :(得分:7)

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

答案 3 :(得分:7)

您是否尝试将其转换为Integer进行比较

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

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

答案 4 :(得分:6)

实际上MySQL有内置的位文字:

select*from table where active = 0b1

答案 5 :(得分:0)

嗯,对于比较和更新,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使用readline 6.2为debian-linux-gnu(x86_64)分发5.5.31

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