my_table
contient le champ enabled
qui est défini comme suit: enabled BIT NOT NULL DEFAULT 0
.
Cette table comporte plusieurs lignes avec enabled = b'0'
et plusieurs lignes avec enabled = b'1'
.
Cependant, à la fois ceci:
SELECT * from my_table WHERE enabled = b'0';
et ça:
SELECT * from my_table WHERE enabled = b'1';
affichez vide dans la colonne enabled
:
+----+---------+
| id | enabled |
+----+---------+
| 1 | |
| 2 | |
+----+---------+
Pourquoi donc? Comment puis-je voir la valeur du champ enabled
?
$ mysql --version
mysql Ver 14.14 Distrib 5.1.63, for debian-linux-gnu (x86_64) using readline 6.1
La raison pour laquelle vous ne pouvez pas le voir dans le terminal est parce que les valeurs de bits sont des caractères non imprimables.
Permet d'insérer les valeurs suivantes:
INSERT INTO `my_table` (`ID`, `enabled`)
VALUES (1,b'1'),(2,b'0');
Puis sélectionnez-les dans le fichier:
mysql> SELECT * FROM my_table INTO OUTFILE '/tmp/my_table.txt' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
Premièrement, regardons notre fichier /tmp/my_table.txt
en texte brut:
"1"," "
"2", ""
puis en vue hexagonale:
22 31 22 2C 22 01 22 0A 22 32 22 2C 22 00 22 0A
Pour pouvoir voir ces valeurs, vous pouvez simplement CAST
les dans SELECT
:
SELECT id, CAST(enabled AS UNSIGNED) AS enabled FROM my_table
Et cela produira la sortie suivante:
+----+---------+
| id | enabled |
+----+---------+
| 1 | 1 |
| 2 | 0 |
+----+---------+
2 rows in set (0.00 sec)
le moyen le plus simple est la fonction ORD
:
SELECT ORD(`enabled`) AS `enabled` FROM `my_table`
Une autre façon de le faire est
SELECT enabled+0 from my_table
Les valeurs en bits sont renvoyées sous forme de valeurs binaires. Pour les afficher sous forme imprimable, ajoutez 0 ou utilisez une fonction de conversion telle que BIN ().
https://dev.mysql.com/doc/refman/5.7/en/bit-field-literals.html
Vous pouvez également essayer SELECT enabled&1 from my_table
.