web-dev-qa-db-fra.com

Mysql: Comment interroger une colonne de type bit?

Salut, j'utilise hibernate et Mysql. J'ai une classe avec un attribut booléen appelé «actif».

La table de base de données générée a le type de données BIT. Jusqu'ici tout va bien. Je veux interroger cette valeur mais je ne sais pas comment le faire. J'ai essayé

 SELECT * from table where active = 1

ne fonctionne pas, ni ce qui suit

 SELECT * from table where active = true

Je n'ai rien trouvé ni dans le manuel de référence ni chez Stackoveflow.

Un indice?

Merci d'avance!

27
Luixv
SELECT * FROM table WHERE active = (1)
38
Peter D

Selon cette page , BIT est un synonyme de TINYINT (1) pour les versions avant la version 5.0.3 .

Avez-vous essayé ces?

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

Cette entrée de blog suggère d'éviter le type de données BIT.

18
Andomar

Pour spécifier les valeurs en bits, la notation b'value 'peut être utilisée. 

7
dfa

Avez-vous essayé de le convertir en un entier pour la comparaison

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

J'utilise MS SQL la plupart du temps, alors pardonnez-moi si cela ne fonctionne pas car je ne peux pas le tester.

7
RoguePlanetoid

En fait, MySQL a des littéraux de bits intégrés:

select*from table where active = 0b1
6
Pacerier

Eh bien, pour les comparaisons et les mises à jour, 0 et 1 fonctionnent pour moi:

Voici un champ de type bit (1), une ligne, le champ est actuellement faux:

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)

Mise à jour en modifiant 0 à 1 dans isfeatured, qui est du type 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

Une ligne a changé ... Essayez encore:

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

Aucune ligne modifiée comme prévu.

Les mêmes requêtes de sélection qu'avant:

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)

Vous voyez, ça marche.

J'utilise:

mysql Ver 14.14 Distrib 5.5.31, pour debian-linux-gnu (x86_64) en utilisant readline 6.2

et

/ usr/sbin/mysqld Ver 5.5.31-0 + wheezy1 pour debian-linux-gnu sur x86_64 ((Debian))

0
Jimi WIlls