2009-05-08 3 views
26

Hi Ich benutze Hibernate und Mysql. Ich habe eine Klasse mit einem booleschen Attribut namens 'aktiv'.Mysql: Wie Abfrage einer Spalte, deren Typ ist Bit?

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

versucht
SELECT * from table where active = 1 

funktioniert nicht, weder die folgende

SELECT * from table where active = true 

ich nichts weder im Referenzhandbuch noch auf Stackoveflow gefunden haben.

Irgendwelche Hinweise?

Vielen Dank im Voraus!

Antwort

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

Ihre Antwort richtig ist. Ich kannte diese Notation nicht. – Luixv

7

Um Bitwerte anzugeben, kann die b'value-Notation verwendet werden.

+0

wahr. Ich konnte das Handbuch nicht finden. – Luixv

+0

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

+0

@Alvaro: Diese Frage ist fast 4 Jahre alt! – Luixv

19

Nach this page ist BIT ein Synonym für TINYINT (1) für Versionen vor 5.0.3.

Haben Sie diese ausprobiert?

Diese blog entry schlägt vor, den BIT-Datentyp insgesamt zu vermeiden.

+0

Der erste und der dritte Eintrag sind coorect, während der zweite nicht funktioniert, zumindest unter meiner Mysql-Installation. Danke trotzdem. – Luixv

+0

@Andomar Nicht einverstanden, um den BIT-Datentyp zu vermeiden. Der Nachteil ist die Interoperabilität mit älteren Versionen, vorausgesetzt, Sie benötigen es nicht, BIT speichert Daten tatsächlich kompakter und spart dadurch Speicherplatz. – Pacerier

7

Haben Sie es auf eine ganze Zahl zum Vergleich

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

Ich benutze MS SQL die meiste Zeit versucht Gießen mich so vergeben, wenn diese, wie ich es nicht testen können, funktioniert nicht.

+0

Ihre Antwort ist richtig, vielen Dank. – Luixv

6

Eigentlich hat MySQL Einbau-Bit-Literale:

select*from table where active = 0b1 
0

Nun, für beide Vergleiche und Updates, 0 und 1 für mich arbeiten:

Hier ist ein Feld vom Typ Bit (1), ein Reihe, ist das Feld derzeit 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) 

aktualisieren Ändern 0 auf 1 in isfeatured, die Typ-Bit ist (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 geändert ... Versuchen Sie es erneut:

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

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) 

See, es funktioniert.

Ich verwende:

mysql Ver 14.14 Distrib 5.5.31, für debian-linux-gnu (x86_64) mit Readline- 6.2

und

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

Verwandte Themen