Spec-Zone.ru › MySQL 5.7

9.1.4 Шестнадцатеричные литералы

Шестнадцатеричные литералы записываются с использованием обозначения X'val' или 0xval, где val содержит шестнадцатеричные цифры (0..9, A..F). Регистр цифр и любого ведущего X не имеет значения. Ведущий 0x чувствителен к регистру и не может быть записан как 0X.

Допустимые шестнадцатеричные литералы:

X'01AF'
X'01af'
x'01AF'
x'01af'
0x01AF
0x01af

Недопустимые шестнадцатеричные литералы:

X'0G'   (G is not a hexadecimal digit)
0X01AF  (0X must be written as 0x)

Значения, записанные с использованием обозначения X'val', должны содержать четное число цифр; в противном случае произойдет синтаксическая ошибка. Для исправления проблемы дополните значение ведущим нулем:

mysql> SET @s = X'FFF';
ERROR 1064 (42000): You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server
version for the right syntax to use near 'X'FFF''

mysql> SET @s = X'0FFF';
Query OK, 0 rows affected (0.00 sec)

Значения, записанные с использованием обозначения 0xval, которые содержат нечетное число цифр, интерпретируются как имеющие дополнительный ведущий 0. Например, 0xaaa интерпретируется как 0x0aaa.

По умолчанию шестнадцатеричный литерал является двоичной строкой, где каждая пара шестнадцатеричных цифр представляет символ:

mysql> SELECT X'4D7953514C', CHARSET(X'4D7953514C');
+---------------+------------------------+
| X'4D7953514C' | CHARSET(X'4D7953514C') |
+---------------+------------------------+
| MySQL         | binary                 |
+---------------+------------------------+
mysql> SELECT 0x5461626c65, CHARSET(0x5461626c65);
+--------------+-----------------------+
| 0x5461626c65 | CHARSET(0x5461626c65) |
+--------------+-----------------------+
| Table        | binary                |
+--------------+-----------------------+

Шестнадцатеричный литерал может иметь необязательный ввод набора символов и COLLATE предложение, чтобы обозначить его как строку, которая использует определённый набор символов и сортировку:

[_charset_name] X'val' [COLLATE collation_name]

Примеры:

SELECT _latin1 X'4D7953514C';
SELECT _utf8 0x4D7953514C COLLATE utf8_danish_ci;

В примерах используется обозначение X'val', но обозначение 0xval также допускает вводы. Дополнительную информацию о вводах см. в разделе 10.3.8 «Вводы набора символов».

В числовых контекстах MySQL обрабатывает шестнадцатеричный литерал как BIGINT UNSIGNED (64-битное беззнаковое целое число). Для обеспечения числовой обработки шестнадцатеричного литерала используйте его в числовом контексте. Способы сделать это включают добавление 0 или использование CAST(... AS UNSIGNED). Например, шестнадцатеричный литерал, назначенный пользовательской переменной, по умолчанию является двоичной строкой. Чтобы назначить значение как число, используйте его в числовом контексте:

mysql> SET @v1 = X'41';
mysql> SET @v2 = X'41'+0;
mysql> SET @v3 = CAST(X'41' AS UNSIGNED);
mysql> SELECT @v1, @v2, @v3;
+------+------+------+
| @v1  | @v2  | @v3  |
+------+------+------+
| A    |   65 |   65 |
+------+------+------+

Пустое шестнадцатеричное значение (X'') оценивается как двоичная строка нулевой длины. При преобразовании в число получается 0:

mysql> SELECT CHARSET(X''), LENGTH(X'');
+--------------+-------------+
| CHARSET(X'') | LENGTH(X'') |
+--------------+-------------+
| binary       |           0 |
+--------------+-------------+
mysql> SELECT X''+0;
+-------+
| X''+0 |
+-------+
|     0 |
+-------+

Обозначение X'val' основано на стандарте SQL. Обозначение 0x основано на ODBC, в котором шестнадцатеричные строки часто используются для предоставления значений для BLOB столбцов.

Для преобразования строки или числа в строку в шестнадцатеричном формате используйте функцию HEX():

mysql> SELECT HEX('cat');
+------------+
| HEX('cat') |
+------------+
| 636174     |
+------------+
mysql> SELECT X'636174';
+-----------+
| X'636174' |
+-----------+
| cat       |
+-----------+

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/hexadecimal-literals.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API