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!
SELECT * FROM table WHERE active = (1)
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.
Pour spécifier les valeurs en bits, la notation b'value 'peut être utilisée.
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.
En fait, MySQL a des littéraux de bits intégrés:
select*from table where active = 0b1
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))