wake-up-neo.com

MySQL: Wie fragt man eine Spalte ab, deren Typ Bit ist?

Hallo, ich benutze Hibernate und MySQL. Ich habe eine Klasse mit einem booleschen Attribut namens 'active'.

Die generierte Datenbanktabelle hat den Datentyp BIT. So weit, ist es gut. Ich möchte diesen Wert abfragen, weiß aber nicht, wie ich es machen soll. ich habe es versucht

 SELECT * from table where active = 1

funktioniert nicht, auch nicht die folgenden

 SELECT * from table where active = true

Ich habe weder im Referenzhandbuch noch bei Stackoveflow etwas gefunden.

Irgendein Hinweis?

Danke im Voraus!

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

Laut dieser Seite ist BIT ein Synonym für TINYINT (1) für Versionen vor 5.0.3 .

Hast du diese probiert?

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

Dieser Blogeintrag schlägt vor, den BIT-Datentyp vollständig zu vermeiden.

18
Andomar

Zur Angabe von Bitwerten kann die b'value-Notation verwendet werden. 

7
dfa

Haben Sie versucht, es zum Vergleich in eine Ganzzahl zu gießen

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

Ich benutze meistens MS SQL, also vergib mir, wenn dies nicht funktioniert, da ich es nicht testen kann.

7
RoguePlanetoid

MySQL verfügt über integrierte Bit-Literale:

select*from table where active = 0b1
6
Pacerier

Für Vergleiche und Updates arbeiten 0 und 1 für mich:

Hier ist ein Feld vom Typ Bit (1), eine Zeile, das Feld ist derzeit falsch:

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)

Aktualisieren Sie das Ändern von 0 auf 1 in isfeatured. Dies ist das Typbit (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

Eine Zeile hat sich geändert ... Versuchen Sie es noch einmal:

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

Es wurden keine Zeilen wie erwartet geändert.

Gleiche Auswahlabfragen wie zuvor:

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)

Sehen Sie, es funktioniert.

Ich benutze:

mysql Ver 14.14 Distrib 5.5.31, für debian-linux-gnu (x86_64) unter Verwendung von readline 6.2

und

/ usr/sbin/mysqld Ver 5.5.31-0 + wheezy1 für debian-linux-gnu unter x86_64 ((Debian))

0
Jimi WIlls