Hexadecimal Literals

十六进制字面值是有 X0x 前缀的字符串,后接表示十六进制的数字。注意 0x 是大小写敏感的,不能表示为 0X

例:

  1. X'ac12'
  2. X'12AC'
  3. x'ac12'
  4. x'12AC'
  5. 0xac12
  6. 0x12AC

以下是不合法的十六进制字面值:

  1. X'1z' (z 不是合法的十六进制值)
  2. 0X12AC (0X 必须用小写的 0x)

对于使用 X'val' 格式的十六进制字面值,val 必须要有一个数字,可以在前面补一个 0 来避免语法错误。

  1. mysql> select X'aff';
  2. ERROR 1105 (HY000): line 0 column 13 near ""hex literal: invalid hexadecimal format, must even numbers, but 3 (total length 13)
  3. mysql> select X'0aff';
  4. +---------+
  5. | X'0aff' |
  6. +---------+
  7. |
  8. |
  9. +---------+
  10. 1 row in set (0.00 sec)

默认情况,十六进制字面值是一个二进制字符串。

如果需要将一个字符串或者数字转换为十六进制字面值,可以使用内建函数 HEX()

  1. mysql> SELECT HEX('TiDB');
  2. +-------------+
  3. | HEX('TiDB') |
  4. +-------------+
  5. | 54694442 |
  6. +-------------+
  7. 1 row in set (0.01 sec)
  8. mysql> SELECT X'54694442';
  9. +-------------+
  10. | X'54694442' |
  11. +-------------+
  12. | TiDB |
  13. +-------------+
  14. 1 row in set (0.00 sec)