web-dev-qa-db-fra.com

Impossible de voir la valeur du champ MySQL BIT lors de l'utilisation de SELECT

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

39
Misha Moroshko

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)
66
peterm

le moyen le plus simple est la fonction ORD:

SELECT ORD(`enabled`) AS `enabled` FROM `my_table`
20
علیرضا

Une autre façon de le faire est

SELECT enabled+0 from my_table
19
L-Samuels

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

4
tingshuai.yts

Vous pouvez également essayer SELECT enabled&1 from my_table

0
Arjun Aravind