9.1.5 Литералы битовых значений
Литералы битовых значений записываются с использованием обозначения b' или val'0b. valval — это двоичное значение, записанное с помощью нулей и единиц. Регистр символов ведущей b не имеет значения. Ведущая 0b — чувствительна к регистру и не может быть записана как 0B.
Допустимые литералы битовых значений:
b'01'
B'01'
0b01
Недопустимые литералы битовых значений:
b'2' (2 is not a binary digit)
0B01 (0B must be written as 0b)
По умолчанию, литерал битового значения — это двоичная строка:
mysql> SELECT b'1000001', CHARSET(b'1000001');
+------------+---------------------+
| b'1000001' | CHARSET(b'1000001') |
+------------+---------------------+
| A | binary |
+------------+---------------------+
mysql> SELECT 0b1100001, CHARSET(0b1100001);
+-----------+--------------------+
| 0b1100001 | CHARSET(0b1100001) |
+-----------+--------------------+
| a | binary |
+-----------+--------------------+
Литерал битового значения может иметь необязательный ввод набора символов и COLLATE-оператор, чтобы обозначить его как строку, использующую определённый набор символов и сортировку:
[_charset_name] b'val' [COLLATE collation_name]
Примеры:
SELECT _latin1 b'1000001';
SELECT _utf8 0b1000001 COLLATE utf8_danish_ci;
В примерах используется b' обозначение, но val'0b обозначение также допускает вводы. Сведения об указателях см. в Разделе 10.3.8, «Введение наборов символов».val
В числовых контекстах MySQL обрабатывает битовую литерал как целое число. Для обеспечения числовой обработки битовой литерал используйте её в числовом контексте. Способы сделать это включают добавление 0 или использование CAST(... AS UNSIGNED). Например, битовая литерал, присвоенная пользовательской переменной, по умолчанию является двоичной строкой. Для присвоения значения как числа, используйте её в числовом контексте:
mysql> SET @v1 = b'1100001';
mysql> SET @v2 = b'1100001'+0;
mysql> SET @v3 = CAST(b'1100001' AS UNSIGNED);
mysql> SELECT @v1, @v2, @v3;
+------+------+------+
| @v1 | @v2 | @v3 |
+------+------+------+
| a | 97 | 97 |
+------+------+------+
Пустое битовое значение (b'') оценивается как строка нулевой длины. Преобразованное в число, оно даёт 0:
mysql> SELECT CHARSET(b''), LENGTH(b'');
+--------------+-------------+
| CHARSET(b'') | LENGTH(b'') |
+--------------+-------------+
| binary | 0 |
+--------------+-------------+
mysql> SELECT b''+0;
+-------+
| b''+0 |
+-------+
| 0 |
+-------+
Битовое обозначение удобно для указания значений, которые будут назначены столбцам BIT:
mysql> CREATE TABLE t (b BIT(8));
mysql> INSERT INTO t SET b = b'11111111';
mysql> INSERT INTO t SET b = b'1010';
mysql> INSERT INTO t SET b = b'0101';
Битовые значения в наборах результатов возвращаются как двоичные значения, которые могут не отображаться корректно. Для преобразования битового значения в отображаемую форму, используйте его в числовом контексте или используйте функцию преобразования, такую как BIN() или HEX(). Старшие 0 цифры не отображаются в преобразованном значении.
mysql> SELECT b+0, BIN(b), OCT(b), HEX(b) FROM t;
+------+----------+--------+--------+
| b+0 | BIN(b) | OCT(b) | HEX(b) |
+------+----------+--------+--------+
| 255 | 11111111 | 377 | FF |
| 10 | 1010 | 12 | A |
| 5 | 101 | 5 | 5 |
+------+----------+--------+--------+
© 2025 Oracle
Licensed under the GPLv2 License.