2013-01-09 4 views
33

my_table zawiera pole enabled zdefiniowane jako: enabled BIT NOT NULL DEFAULT 0.Nie można wyświetlić wartości pola BIT MySQL, gdy używa się SELECT

Ta tabela ma wiele wierszy z enabled = b'0' i wiele wierszy z enabled = b'1'.

Jednak zarówno to:

SELECT * from my_table WHERE enabled = b'0'; 

a to:

SELECT * from my_table WHERE enabled = b'1'; 

pokazać puste w kolumnie enabled:

+----+---------+ 
| id | enabled | 
+----+---------+ 
| 1 |   | 
| 2 |   | 
+----+---------+ 

Dlaczego tak jest? Jak mogę sprawdzić wartość pola enabled?


$ mysql --version 
mysql Ver 14.14 Distrib 5.1.63, for debian-linux-gnu (x86_64) using readline 6.1 

+0

Dlaczego używasz 'BIT' zamiast' BOOLEAN'? Czy musisz przechowywać więcej niż jedną flagę w tej kolumnie? – cdhowie

+0

To dziwne. Nie mogę tego odtworzyć. Działa [tutaj] (http://sqlfiddle.com/#!2/64482/1) –

Odpowiedz

50

Powodem, dlaczego nie można zobaczyć go w terminalu dlatego bitowe wartości są dla znaków druku.

Pozwala wstawić następujące wartości:

INSERT INTO `my_table` (`ID`, `enabled`) 
VALUES (1,b'1'),(2,b'0'); 

Następnie wybierz je do pliku:

mysql> SELECT * FROM my_table INTO OUTFILE '/tmp/my_table.txt' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'; 

Pierwszy pozwala zobaczyć nasz plik /tmp/my_table.txt jako zwykły tekst:

"1",” "
" 2 "," "

a następnie w widoku hex:

22 31 22 2C 22 22 0A 22 32 22 2C 22 22 0A

aby móc zobaczyć te wartości, które można je po prostu CAST w SELECT:

SELECT id, CAST(enabled AS UNSIGNED) AS enabled FROM my_table 

I tha t będzie następujący wynik:

+----+---------+ 
| id | enabled | 
+----+---------+ 
| 1 |  1 | 
| 2 |  0 | 
+----+---------+ 
2 rows in set (0.00 sec) 
+0

Dzięki za wspaniałe wyjaśnienie! –

+1

Jesteś bardzo mile widziany i powodzenia przy użyciu tych bitów – peterm

+0

jak włączyć/wyświetlić to przy użyciu 'wybierz * z my_table'? –

16

najprostszym sposobem jest ORD funkcja:

SELECT ORD(`enabled`) AS `enabled` FROM `my_table` 
12

Innym sposobem można zrobić to

SELECT enabled+0 from my_table 
+1

Działa świetnie, dziękuję! –

Powiązane problemy