Подтвердить что ты не робот

Невозможно увидеть значение поля BIT MySQL при использовании SELECT

my_table содержит поле enabled, которое определяется как: enabled BIT NOT NULL DEFAULT 0.

В этой таблице несколько строк с enabled = b'0' и несколько строк с enabled = b'1'.

Однако оба эти:

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

и это:

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

показать пробел в столбце enabled:

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

Почему? Как я могу увидеть значение поля enabled?


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

4b9b3361

Ответ 1

Причина, по которой вы не можете видеть ее в терминале, заключается в том, что битовые значения не являются печатными символами.

Позволяет вставить следующие значения:

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

Затем выберите их в файл:

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

Сначала давайте посмотрим наш /tmp/my_table.txt файл как обычный текст:

"1", "
" 2 "," "

а затем в шестнадцатеричном представлении:

22 31 22 2C 22 01 22 0A 22 32 22 2C 22 00 22 0A

Чтобы увидеть эти значения, вы можете просто CAST их в SELECT:

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

И это даст следующий результат:

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

Ответ 2

Самый простой способ - это функция ORD:

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

Ответ 3

Другой способ, которым вы можете это сделать, -

SELECT enabled+0 from my_table

Ответ 4

Битовые значения возвращаются как двоичные значения. Чтобы отобразить их в печатной форме, добавьте 0 или используйте функцию преобразования, такую ​​как BIN().

https://dev.mysql.com/doc/refman/5.7/en/bit-field-literals.html