2009-05-08 26 views
26

Hola, estoy usando hibernate y Mysql. Tengo una clase con un atributo booleano llamado 'activo'.Mysql: ¿Cómo consultar una columna cuyo tipo es un bit?

La tabla de la base de datos generada tiene el tipo de datos BIT. Hasta aquí todo bien. Quiero consultar este valor, pero no sé cómo hacerlo. He intentado

SELECT * from table where active = 1 

no funciona, ni el siguiente

SELECT * from table where active = true 

No he encontrado nada ni en el manual de referencia ni en Stackoveflow.

¿Alguna pista?

¡Gracias de antemano!

Respuesta

35
SELECT * FROM table WHERE active = (1) 
+0

Su respuesta es correcta. No sabía esta notación. – Luixv

7

Para especificar valores de bit, se puede usar la notación b'value '.

+0

cierto. No pude encontrar en el manual del usuario. – Luixv

+0

@Luixv - http://dev.mysql.com/doc/refman/5.5/en/bit-type.html –

+0

@Alvaro: ¡Esta pregunta tiene casi 4 años! – Luixv

19

Según this page, BIT es un sinónimo de TINYINT (1) para las versiones anterior a 5.0.3.

¿Has probado estos?

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

Este blog entry sugiere evitar el tipo de datos BIT por completo.

+0

La primera y la tercera entrada son coorect mientras que la segunda no funciona, al menos bajo mi instalación Mysql. Gracias de cualquier manera. – Luixv

+0

@Andomar No estoy de acuerdo para evitar el tipo de datos BIT. La desventaja es la interoperabilidad con versiones anteriores, suponiendo que no la necesite, BIT en realidad almacena datos de forma más compacta y, por lo tanto, ahorra espacio de almacenamiento. – Pacerier

7

has necesitado fundición en un número entero de comparación

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

utilizo MS SQL mayor parte del tiempo por lo que me perdone si esto no funciona, ya que no puedo probarlo.

+0

Tu respuesta es correcta, muchas gracias. – Luixv

6

En realidad MySQL se ha incorporado en los literales de bits:

select*from table where active = 0b1 
0

Bueno, para ambas comparaciones y actualizaciones, 0 y 1 trabajo para mí:

Aquí hay un campo de tipo bit (1), uno fila, el campo es actualmente falsa:

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) 

actualización cambiando de 0 a 1 en isfeatured, que es de tipo 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 

Una fila cambió ... Inténtelo de nuevo:

mysql> update nodes set isfeatured=1 where isfeatured = 0; 
Query OK, 0 rows affected (0.00 sec) 
Rows matched: 0 Changed: 0 Warnings: 0 

No hay filas cambiadas como se esperaba.

consultas de selección igual que antes:

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) 

Véase, funciona.

que estoy usando:

mysql Ver 14,14 Distrib 05/05/31, para Debian-linux-gnu (x86_64) usando readline 6.2

y

/usr/sbin/mysqld Ver 5.5.31-0 + wheezy1 para Debian-linux-gnu en x86_64 ((Debian))

Cuestiones relacionadas