2009-05-08 8 views
26

Salut J'utilise hibernate et Mysql. J'ai une classe avec un attribut booléen appelé 'actif'.Mysql: Comment interroger une colonne dont le type est bit?

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 les éléments suivants

SELECT * from table where active = true 

Je ne trouve rien ni dans le manuel de référence ni à Stackoveflow.

Un conseil?

Merci d'avance!

Répondre

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

Votre réponse est correcte. Je ne connaissais pas cette notation. – Luixv

7

Pour spécifier des valeurs de bit, la notation b'value peut être utilisée.

+0

vrai. Je ne pouvais pas trouver au manuel d'utilisation. – Luixv

+0

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

+0

@Alvaro: Cette question a presque 4 ans! – Luixv

19

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

Avez-vous essayé cela?

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

Ce blog entry suggère d'éviter complètement le type de données BIT.

+0

La première et la troisième entrée sont coorect tandis que la seconde ne fonctionne pas, au moins sous mon installation Mysql. Merci quand même. – Luixv

+0

@Andomar Désactiver pour éviter le type de données BIT. L'inconvénient est l'interopérabilité avec les anciennes versions, en supposant que vous n'en ayez pas besoin, BIT stocke les données de manière plus compacte et économise ainsi de l'espace de stockage. – Pacerier

7

Avez-vous essayé de le jeter à un nombre entier de 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 comme je ne peux pas tester.

+0

Votre réponse est correcte, merci beaucoup. – Luixv

6

En fait, MySQL a intégré bit littéraux:

select*from table where active = 0b1 
0

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

Voici un champ de type bit (1), un rangée, le champ est actuellement 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) 

Update changeant de 0 à 1 dans isfeatured, qui est de 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é ... Essaye 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 a changé comme prévu.

requêtes SELECT même que précédemment:

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) 

Voir, cela fonctionne.

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))

Questions connexes