跳到主要内容

UNHEX

描述

UNHEX 函数用于将十六进制字符串转换为原始字符串,是 HEX 函数的逆操作。该函数将每两个十六进制字符(0-9, A-F, a-f)转换为一个字节。UNHEX_NULL 函数功能相同,但在遇到无效输入时返回 NULL 而不是空字符串。这两个函数在处理二进制数据、加密数据或需要十六进制表示的数据时非常有用。

提示

该函数自 3.0.6 版本开始支持

语法

UNHEX(<str>)
UNHEX_NULL(<str>)

参数

参数说明
<str>需要解码的十六进制字符串。类型:VARCHAR

返回值

返回 VARCHAR 类型,表示十六进制解码后的原始字符串。

解码规则:

  • 接受字符范围:0-9, a-f, A-F
  • 每两个十六进制字符转换为一个字节
  • 结果可能包含不可打印字符

特殊情况(UNHEX):

  • 如果输入为 NULL,返回空字符串
  • 如果字符串长度为 0 或奇数,返回空字符串
  • 如果包含非十六进制字符,返回空字符串

特殊情况(UNHEX_NULL):

  • 如果输入为 NULL,返回 NULL
  • 如果字符串长度为 0 或奇数,返回 NULL
  • 如果包含非十六进制字符,返回 NULL

示例

  1. 基本十六进制解码
SELECT UNHEX('41'), UNHEX('61');
+-------------+-------------+
| UNHEX('41') | UNHEX('61') |
+-------------+-------------+
| A | a |
+-------------+-------------+
  1. 多字符解码
SELECT UNHEX('4142'), UNHEX('48656C6C6F');
+---------------+----------------------+
| UNHEX('4142') | UNHEX('48656C6C6F') |
+---------------+----------------------+
| AB | Hello |
+---------------+----------------------+
  1. NULL 值处理(两个函数对比)
SELECT UNHEX(NULL), UNHEX_NULL(NULL);
+-------------+-----------------+
| UNHEX(NULL) | UNHEX_NULL(NULL) |
+-------------+-----------------+
| | NULL |
+-------------+-----------------+
  1. 空字符串处理
SELECT UNHEX(''), UNHEX_NULL('');
+-----------+-----------------+
| UNHEX('') | UNHEX_NULL('') |
+-----------+-----------------+
| | NULL |
+-----------+-----------------+
  1. 非法字符处理
SELECT UNHEX('@'), UNHEX_NULL('@');
+------------+-----------------+
| UNHEX('@') | UNHEX_NULL('@') |
+------------+-----------------+
| | NULL |
+------------+-----------------+
  1. 奇数长度字符串
SELECT UNHEX('123'), UNHEX_NULL('123');
+--------------+-------------------+
| UNHEX('123') | UNHEX_NULL('123') |
+--------------+-------------------+
| | NULL |
+--------------+-------------------+
  1. UTF-8 字符解码
SELECT UNHEX('E4B8AD'), UNHEX('E69687');
+-----------------+-----------------+
| UNHEX('E4B8AD') | UNHEX('E69687') |
+-----------------+-----------------+
| 中 | 文 |
+-----------------+-----------------+
  1. 数字编码解码
SELECT UNHEX('313233'), UNHEX('393837');
+------------------+------------------+
| UNHEX('313233') | UNHEX('393837') |
+------------------+------------------+
| 123 | 987 |
+------------------+------------------+
  1. 十六进制编码解码循环验证
SELECT UNHEX(HEX('Hello')), UNHEX(HEX('Test123'));
+---------------------+------------------------+
| UNHEX(HEX('Hello')) | UNHEX(HEX('Test123')) |
+---------------------+------------------------+
| Hello | Test123 |
+---------------------+------------------------+