2013-01-09 12 views
33

my_table contiene il campo enabled che è definito come: enabled BIT NOT NULL DEFAULT 0.Impossibile vedere il valore del campo BIT di MySQL quando si utilizza SELECT

Questa tabella ha più righe con enabled = b'0' e più righe con enabled = b'1'.

Tuttavia, sia questa:

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

e questo:

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

spettacolo vuoto nella colonna enabled:

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

Perché? Come posso vedere il valore del campo enabled?


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

+0

perché stai usando 'BIT' invece di' boolean'? Dovrai memorizzare più di un flag in quella colonna? – cdhowie

+0

Questo è strano. Non posso riprodurlo. Funziona [qui] (http://sqlfiddle.com/#!2/64482/1) –

risposta

50

Il motivo per cui non è possibile vederlo in terminale è perché i valori bit sono i caratteri non stampabili.

Consente di inserimento seguenti valori:

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

Selezionare quindi loro di presentare:

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

primo luogo permette di visualizzare il nostro file /tmp/my_table.txt come testo normale:

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

e poi in vista esadecimale:

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

Per essere in grado di vedere quei valori che può semplicemente CAST loro in SELECT:

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

E tha t produrrà il seguente output:

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

Grazie per l'ottima spiegazione! –

+1

Sei molto benvenuto e buona fortuna usando quei bit – peterm

+0

come abilitare/visualizzare questo quando usi 'select * from my_table'? –

16

il modo più semplice è ORD funzione:

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

Un altro modo si può fare è

SELECT enabled+0 from my_table 
+1

Funziona alla grande, grazie! –

Problemi correlati