• Hexadecimal Literals

    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)