可变长二进制函数

可变长二进制函数用于处理二进制数据类型(如BINARY、VARBINARY、BLOB等),比如加解密、提取子串、计算长度等。本文介绍云原生数据仓库 AnalyticDB MySQL 版可变长二进制函数的用法与示例。

  • AES_DECRYPT:使用AES算法进行数据解密。

  • AES_DECRYPT_MY:使用AES算法进行数据解密。

  • AES_ENCRYPT:使用AES算法进行数据加密。

  • AES_ENCRYPT_MY:使用AES算法进行数据加密。

  • CHAR_LENGTH:以字符为单位返回字符串的长度。

  • COMPRESS:压缩字符串X并将结果作为二进制字符串返回。

  • CRC32:返回参数x的循环冗余码。

  • ENCRYPT:对字符串进行加密。

  • FROM_BASE64:解码BASE64编码的字符串并返回结果。

  • GUNZIP:基于GZIP格式解压二进制字符串X,返回解压后的二进制字符串。

  • GZIP:基于GZIP格式压缩二进制字符串X,并将结果作为二进制字符串返回。

  • HEX:将字符串或数字转换为十六进制形式,并返回结果。

  • LEFT:返回字符串最左边的`y`个字符。

  • LENGTH:以字节为单位返回参数的长度。

  • LOWER:返回参数的小写形式。

  • LPAD:左拼接字符串。

  • LTRIM:移除字符串左边的空白字符。

  • MD5:计算参数MD5的hash值。

  • ORD:如果字符串最左边的字符是多字节字符,则返回该字符的代码。

  • REPEAT:返回重复指定次数的字符串。

  • REVERSE:反转字符串中的字符。

  • RIGHT:返回字符串最右边的`y`个字符。

  • RPAD:右拼接字符串。

  • RTRIM:移除字符串右边的空白字符。

  • SHA1:计算字符串的SHA-1校验和。

  • SHA2:计算SHA-2校验和。

  • SUBSTR:返回指定子字符串。

  • TO_BASE64:返回字符串的BASE64编码形式。

  • TRIM:移除字符串左右两边的空白字符。

  • UNCOMPRESS:解压缩由COMPRESS()函数压缩的字符串。

  • UNCOMPRESSED_LENGTH:在压缩之前返回一个字符串的长度。

  • UNHEX:将参数中的每对字符转换为十六进制形式,再将其转换为数字表示的字节,最后以二进制字符串形式返回结果。

  • UNZIP:基于ZIP格式解压二进制字符串X,返回解压后的二进制字符串。

  • UPPER:返回参数的大写形式。

  • ZIP:基于ZIP格式压缩二进制字符串X,并将结果作为二进制字符串返回。

注意事项

部分函数因不同客户端解析的编码不同,可能会出现返回值不一样,会将“中国”解析为"0xE4B8ADE59BBD"。本文中的所有示例的返回结果均以DMS中的结果为例。

AES_DECRYPT

AES_DECRYPT(VARBINARY X, VARCHAR Y)
  • 命令说明:使用AES算法解密XY为密钥。

  • 返回值类型:VARBINARY

  • 示例:

    SELECT HEX(AES_DECRYPT(AES_ENCRYPT(CAST('中国' AS VARBINARY), '0123'),'0123'));

    返回结果如下:

    +-----------------------------------------------------------------------------+
    | HEX(AES_DECRYPT(AES_ENCRYPT(CAST('中国' AS VARBINARY), '0123'),'0123'))     |
    +-----------------------------------------------------------------------------+
    | E4B8ADE59BBD                                                                |
    +-----------------------------------------------------------------------------+

AES_DECRYPT_MY

重要
  • AES_DECRYPT_MY函数兼容MySQL,MySQL中加密的数据可以在AnalyticDB for MySQL中解密。

  • 仅3.1.10.0及以上内核版本的集群支持使用AES_DECRYPT_MY函数解密数据。

    查看企业版基础版湖仓版集群的内核版本,请执行SELECT adb_version();。如需升级内核版本,请联系技术支持。

    查看和升级数仓版集群的内核版本,请参见查看和升级版本

AES_DECRYPT_MY(VARBINARY X, VARCHAR Y)
  • 命令说明:使用AES算法解密XY为密钥。

  • 返回值类型:VARBINARY

  • 示例:

    SELECT CAST(AES_DECRYPT_MY(UNHEX('788B49C1BD46F563FC7464F50216539F'),'key_string') AS CHAR);

    返回结果如下:

    +----------------------------------------------------------------------------------------+
    | CAST(AES_DECRYPT_MY(UNHEX('788B49C1BD46F563FC7464F50216539F'),'key_string') AS CHAR)   |
    +----------------------------------------------------------------------------------------+
    | 中国                                                                                   |
    +----------------------------------------------------------------------------------------+

AES_ENCRYPT

AES_ENCRYPT(VARBINARY X, VARCHAR Y)
  • 命令说明:使用AES算法加密XY为密钥。

  • 返回值类型:VARBINARY

  • 示例:

    SELECT HEX(AES_ENCRYPT(CAST('中国' AS VARBINARY), '0123'));

    返回结果如下:

    +-------------------------------------------------------+
    |HEX(AES_ENCRYPT(CAST('中国' AS VARBINARY), '0123'))    |
    +-------------------------------------------------------+
    | DFB166F0A03113AA848C0CE545D58757                      | 
    +-------------------------------------------------------+

AES_ENCRYPT_MY

重要
  • AES_ENCRYPT_MY函数兼容MySQL,AnalyticDB for MySQL中加密的数据可以在MySQL中解密。

  • 仅3.1.10.0及以上内核版本的集群支持使用AES_ENCRYPT_MY函数加密数据。

    查看企业版基础版湖仓版集群的内核版本,请执行SELECT adb_version();。如需升级内核版本,请联系技术支持。

    查看和升级数仓版集群的内核版本,请参见查看和升级版本

AES_ENCRYPT_MY(VARBINARY X, VARCHAR Y)
  • 命令说明:使用AES算法加密XY为密钥。

  • 返回值类型:VARBINARY

  • 示例:

    SELECT HEX(AES_ENCRYPT_MY('中国','key_string'));

    返回结果如下:

    +----------------------------------------------+
    |HEX(AES_ENCRYPT_MY('中国', 'key_string'))     |
    +----------------------------------------------+
    | 788B49C1BD46F563FC7464F50216539F             | 
    +----------------------------------------------+

CHAR_LENGTH

CHAR_LENGTH(VARBINARY X)
  • 命令说明:以字符为单位返回字符串X的长度。

  • 返回值类型:LONG

  • 示例:

    SELECT CHAR_LENGTH(CAST('ABC' AS VARBINARY));

    返回结果如下:

    +---------------------------------------+
    | CHAR_LENGTH(CAST('ABC' AS VARBINARY)) |
    +---------------------------------------+
    |3                                      | 
    +---------------------------------------+

COMPRESS

COMPRESS(VARBINARY X)          
  • 命令说明:压缩字符串X并将结果作为二进制字符串返回。

  • 返回值类型:VARBINARY

  • 示例:

    SELECT COMPRESS(COMPRESS(CAST('中国' AS VARBINARY)));

    返回结果:

    +--------------------------------------------+
    | HEX(COMPRESS(CAST('中国' AS VARBINARY)))   |
    +--------------------------------------------+
    | 06000000789C7BB263EDD3D97B01104C0487       |  
    +--------------------------------------------+

CRC32

CRC32(VARBINARY X)        
  • 命令说明:返回参数X的循环冗余码。

  • 返回值类型:LONG

  • 示例:

    SELECT CRC32(CAST('中国' AS VARBINARY));

    返回结果:

    +------------------------------------+
    | CRC32(CAST('中国' AS VARBINARY))   |
    +------------------------------------+
    |737014929                           |  
    +------------------------------------+

ENCRYPT

ENCRYPT(VARBINARY X, VARCHAR Y)
  • 命令说明:对参数X进行加密,Y为Salt值。

  • 返回值类型:BLOB

  • 示例:

    SELECT ENCRYPT('ABDABC123','KEY');

    返回结果如下:

    +-----------------------------+
    | ENCRYPT('ABDABC123','KEY')  |
    +-----------------------------+
    | kezazmcIo.aCw               |
    +-----------------------------+

FROM_BASE64

FROM_BASE64(VARBINARY X)
  • 命令说明:解码BASE64编码的字符串X并返回结果。

  • 返回值类型:BLOB

  • 示例:

    SELECT FROM_BASE64(TO_BASE64(CAST('abc' AS VARBINARY)));

    返回结果如下:

    +--------------------------------------------------+
    | FROM_BASE64(TO_BASE64(CAST('abc' AS VARBINARY))) |
    +--------------------------------------------------+
    | abc                                              |
    +--------------------------------------------------+

GUNZIP

重要

仅3.1.9.3及以上内核版本的集群支持使用GUNZIP函数。

查看企业版基础版湖仓版集群的内核版本,请执行SELECT adb_version();。如需升级内核版本,请联系技术支持。

查看和升级数仓版集群的内核版本,请参见查看和升级版本

GUNZIP(VARBINARY X)
  • 命令说明:基于GZIP格式解压二进制字符串X,返回解压后的二进制字符串。

  • 返回值类型:VARBINARY。

  • 示例:

    SELECT GUNZIP(GZIP(CAST('中国' AS VARBINARY)));

    返回结果如下:

    +--------------------------------------------+
    | GUNZIP(GZIP(CAST('中国' AS VARBINARY)))    |
    +--------------------------------------------+
    | 中国                                       |  
    +--------------------------------------------+

GZIP

重要

仅3.1.9.3及以上内核版本的集群支持使用GZIP函数。

查看企业版基础版湖仓版集群的内核版本,请执行SELECT adb_version();。如需升级内核版本,请联系技术支持。

查看和升级数仓版集群的内核版本,请参见查看和升级版本

GZIP(VARBINARY X)
  • 命令说明:基于GZIP格式压缩二进制字符串X,并将结果作为二进制字符串返回。

  • 返回值类型:VARBINARY。

  • 示例:

    SELECT HEX(GZIP(CAST('中国' AS VARBINARY)));

    返回结果如下:

    +------------------------------------------------------+
    | HEX(GZIP(CAST('中国' AS VARBINARY)))                |
    +------------------------------------------------------+
    |1F8B08000000000000007BB263EDD3D97B0191F4ED2B06000000  | 
    +------------------------------------------------------+

HEX

HEX(VARBINARY X)
  • 命令说明:将字符串X或数字转换为十六进制格式的字符串。

  • 返回值类型:VARCHAR

  • 示例:

    SELECT HEX(CAST('中国' AS VARBINARY));

    返回结果如下:

    +----------------------------------+
    | HEX(CAST('中国' AS VARBINARY))   |
    +----------------------------------+
    | E4B8ADE59BBD                     |  
    +----------------------------------+

LEFT

LEFT(VARBINARY X, BIGINT Y)
LEFT(VARBINARY X, DOUBLE Y)
  • 命令说明:返回字符串X最左边的Y个字符。

  • 返回值类型:BLOB

  • 示例:

    SELECT LEFT(CAST('中国' AS VARBINARY),1000);

    返回结果如下:

    +-----------------------------------------+
    | LEFT(CAST('中国' AS VARBINARY), 1000)   |
    +-----------------------------------------+
    | 中国                                    | 
    +-----------------------------------------+

LENGTH

LENGTH(VARBINARY X)        
  • 命令说明:以字节为单位返回参数X的长度。

  • 返回值类型:LONG

  • 示例:

    SELECT LENGTH(CAST('ABC' AS VARBINARY));

    返回结果如下

     +----------------------------------+
     | LENGTH(CAST('ABC' AS VARBINARY)) |
     +----------------------------------+
     | 3                                |   
     +----------------------------------+

LOWER

LOWER(VARBINARY X)       
  • 命令说明:返回参数X的小写形式。

  • 返回值类型:VARBINARY

  • 示例:

    SELECT LOWER(CAST('ABC' AS VARBINARY));

    返回结果如下:

    +---------------------------------+
    | LOWER(CAST('ABC' AS VARBINARY)) |
    +---------------------------------+
    | abc                             | 
    +---------------------------------+

LPAD

LPAD(VARBINARY X, BIGINT Y, VARCHAR Z)
LPAD(VARBINARY X, DOUBLE Y, VARCHAR Z)
  • 命令说明:将字符串X左边拼接字符串z直到长度达到Y,并返回拼接后的字符串。

    如果X长于Y,则返回值将缩短为y个字符。

  • 返回值类型:VARBINARY

  • 示例:

    SELECT HEX(LPAD(CAST('中国' AS VARBINARY), 7,'-'));

    返回结果如下:

    +------------------------------------------------+
    | HEX(LPAD(CAST('中国' AS VARBINARY), 7, '-'))   |
    +------------------------------------------------+
    | 2DE4B8ADE59BBD                                 | 
    +------------------------------------------------+

LTRIM

LTRIM(VARBINARY X)       
  • 命令说明:移除字符串X左边的空白字符。

  • 返回值类型:BLOB

  • 示例:

    SELECT LTRIM(CAST('  中国  ' AS VARBINARY));

    返回结果如下:

    +----------------------------------------+
    | LTRIM(CAST('  中国  ' AS VARBINARY))   |
    +----------------------------------------+
    | 中国                                   |  
    +----------------------------------------+

MD5

MD5(VARBINARY X)          
  • 命令说明:返回参数XMD5的hash值。

  • 返回值类型:VARCHAR

  • 示例:

    SELECT MD5(CAST('中国' AS VARBINARY));

    返回结果如下:

    +----------------------------------+
    | MD5(CAST('中国' AS VARBINARY))   |
    +----------------------------------+
    | c13dceabcb143acd6c9298265d618a9f |  
    +----------------------------------+

ORD

ORD(VARBINARY X)         
  • 命令说明:如果字符串X最左边的字符是多字节字符,则返回该字符的代码。

  • 返回值类型:LONG

  • 示例:

    SELECT ORD(CAST('中国' AS VARBINARY));

    返回结果如下:

    +----------------------------------+
    | ORD(CAST('中国' AS VARBINARY))   |
    +----------------------------------+
    |228                               | 
    +----------------------------------+

REPEAT

REPEAT(VARBINARY X, DOUBLE Y)
REPEAT(VARBINARY X, BIGINT Y)
  • 命令说明:返回重复指定次数Y的字符串X

  • 返回值类型:VARBINARY

  • 示例:

    SELECT HEX(REPEAT(CAST('中国' AS VARBINARY),1));

    返回结果如下:

    +---------------------------------------------+
    | HEX(REPEAT(CAST('中国' AS VARBINARY),1))    |
    +---------------------------------------------+
    | E4B8ADE59BBD                                | 
    +---------------------------------------------+

REVERSE

REVERSE(VARBINARY X)
  • 命令说明:反转字符串X中的字符。

  • 返回值类型:VARBINARY

  • 示例:

    SELECT HEX(REVERSE(CAST('中国' AS VARBINARY)));

    返回结果如下:

    +-------------------------------------------+
    | HEX(REVERSE(CAST('中国' AS VARBINARY)))   |
    +-------------------------------------------+
    | BD9BE5ADB8E4                              |
    +-------------------------------------------+

RIGHT

RIGHT(VARBINARY X, BIGINT Y)
RIGHT(VARBINARY X, DOUBLE Y)
  • 命令说明:返回字符串X最右边的Y个字符。

  • 返回值类型:VARBINARY

  • 示例:

    SELECT HEX(RIGHT(CAST('中国' AS VARBINARY),1));

    返回结果如下:

    +--------------------------------------------+
    | HEX(RIGHT(CAST('中国' AS VARBINARY), 1))   |
    +--------------------------------------------+
    | BD                                         |
    +--------------------------------------------+

RPAD

RPAD(VARBINARY X, BIGINT Y, VARCHAR Z)
RPAD(VARBINARY X, DOUBLE Y, VARCHAR Z)
  • 命令说明:将字符串X右边拼接字符串z直到长度达到Y,并返回拼接后的字符串。

    如果X长于Y,则返回值将缩短为Y个字符。

  • 返回值类型:VARBINARY

  • 示例:

    SELECT HEX(RPAD(CAST('中国' AS VARBINARY), 4.7,'x'));

    返回结果如下:

    +--------------------------------------------------+
    | HEX(RPAD(CAST('中国' AS VARBINARY), 4.7, 'x'))   |
    +--------------------------------------------------+
    | E4B8ADE59B                                       | 
    +--------------------------------------------------+

RTRIM

RTRIM(VARBINARY X)
  • 命令说明:移除字符串X右边的空白字符。

  • 返回值类型:BLOB

  • 示例:

    SELECT RTRIM(CAST('  中国  ' AS VARBINARY));

    返回结果如下:

    +----------------------------------------+
    | RTRIM(CAST('  中国  ' AS VARBINARY))   |
    +----------------------------------------+
    |   中国                                 | 
    +----------------------------------------+

SHA1

SHA1(VARBINARY X)         
  • 命令说明:计算字符串X的SHA-1校验和。

  • 返回值类型:VARCHAR

  • 示例:

    SELECT SHA1(CAST('中国' AS VARBINARY));

    返回结果如下:

    +------------------------------------------+
    | SHA1(CAST('中国' AS VARBINARY))          |
    +------------------------------------------+
    | 101806f57c322fb403a9788c4c24b79650d02e77 |  
    +------------------------------------------+

SHA2

SHA2(VARBINARY X, INTEGER Y)
SHA2(VARBINARY X, VARCHAR Y)
  • 命令说明:计算字符串XSHA-2系列散列函数(SHA-224、SHA-256、SHA-384和SHA-512)。X是要清理的明文字符串,Y表示结果所需的位数长度,其值必须为224、256、384、512或0。

  • 返回值类型:VARCHAR

  • 示例:

    SELECT SHA2(CAST('中国' AS VARBINARY),256);

    返回结果如下:

    +------------------------------------------------------------------+
    | SHA2(CAST('中国' AS VARBINARY),256)                              |
    +------------------------------------------------------------------+
    | f0e9521611bb290d7b09b8cd14a63c3fe7cbf9a2f4e0090d8238d22403d35182 |
    +------------------------------------------------------------------+

SUBSTR

SUBSTR(VARBINARY X, BIGINT Y, DOUBLE Z)
SUBSTR(VARBINARY X, DOUBLE Y, DOUBLE Z)
SUBSTR(VARBINARY X, BIGINT Y, BIGINT Z)
SUBSTR(VARBINARY X, DOUBLE Y, BIGINT Z)
SUBSTR(VARBINARY X, DOUBLE Y)
SUBSTR(VARBINARY X, BIGINT Y)
  • 命令说明:返回指定子字符串。

  • 返回值类型:VARBINARY

  • 示例:

    • SELECT HEX(SUBSTR(CAST('中国' AS VARBINARY), 2));

      返回结果如下:

      +---------------------------------------------+
      | HEX(SUBSTR(CAST('中国' AS VARBINARY), 2))   |
      +---------------------------------------------+
      | B8ADE59BBD                                  |
      +---------------------------------------------+ 
    • SELECT HEX(SUBSTR(CAST('中国' AS VARBINARY), 2.7, 1.7));

      返回结果如下:

      +----------------------------------------------------+
      | HEX(SUBSTR(CAST('中国' AS VARBINARY), 2.7, 1.7))   |
      +----------------------------------------------------+
      | ADE5                                               |
      +----------------------------------------------------+
    • SELECT HEX(SUBSTR(CAST('China' AS VARBINARY), 2));

      返回结果如下:

      +---------------------------------------------+
      | HEX(SUBSTR(CAST('China' AS VARBINARY), 2))  |
      +---------------------------------------------+
      | 68696E61                                    |
      +---------------------------------------------+ 
    • SELECT HEX(SUBSTR(CAST('China' AS VARBINARY), 2.7, 1.7));

      返回结果如下:

      +----------------------------------------------------+
      | HEX(SUBSTR(CAST('China' AS VARBINARY), 2.7, 1.7))  |
      +----------------------------------------------------+
      | 696E                                               |
      +----------------------------------------------------+

TO_BASE64

TO_BASE64(VARBINARY X)
  • 命令说明:返回字符串X的BASE64编码形式。

  • 返回值类型:VARCHAR

  • 示例:

    SELECT TO_BASE64(CAST('中国' AS VARBINARY));

    返回结果如下:

    +----------------------------------------+
    | TO_BASE64(CAST('中国' AS VARBINARY))   |
    +----------------------------------------+
    | 5Lit5Zu9                               |
    +----------------------------------------+

TRIM

TRIM(VARBINARY X)
  • 命令说明:移除字符串X左右两边的空白字符。

  • 返回值类型:BLOB

  • 示例:

    SELECT TRIM(CAST('  中国  ' AS VARBINARY));

    返回结果如下:

    +---------------------------------------+
    | TRIM(CAST('  中国  ' AS VARBINARY))   |
    +---------------------------------------+
    | 中国                                  | 
    +---------------------------------------+

UNCOMPRESS

UNCOMPRESS(VARBINARY X)           
  • 命令说明:解压缩XCOMPRESS()函数压缩的字符串。

  • 返回值类型:BLOB

  • 示例:

    SELECT UNCOMPRESS(COMPRESS(CAST('中国' AS VARBINARY)));

    返回结果如下:

    +---------------------------------------------------+
    | UNCOMPRESS(COMPRESS(CAST('中国' AS VARBINARY)))   |
    +---------------------------------------------------+
    | 中国                                              | 
    +---------------------------------------------------+

UNCOMPRESSED_LENGTH

UNCOMPRESSED_LENGTH(VARBINARY X)
  • 命令说明:在压缩之前返回字符串X的长度。

  • 返回值类型:LONG

  • 示例:

    SELECT UNCOMPRESSED_LENGTH(COMPRESS(CAST('中国' AS VARBINARY)));

    返回结果如下:

    +------------------------------------------------------------+
    | UNCOMPRESSED_LENGTH(COMPRESS(CAST('中国' AS VARBINARY)))   |
    +------------------------------------------------------------+
    | 6                                                          |
    +------------------------------------------------------------+

UNHEX

UNHEX(VARBINARY X)         
  • 命令说明:将参数X中的每对字符解释为十六进制数,并将其转换为数字表示的字节,以二进制字符串将其返回。

  • 返回值类型:VARBINARY

  • 示例:

    SELECT UNHEX(CAST('中国' AS VARBINARY));

    返回结果如下:

    +------------------------------------+
    | UNHEX(CAST('中国' AS VARBINARY))   |
    +------------------------------------+
    | NULL                               | 
    +------------------------------------+

UNZIP

重要

仅3.1.9.3及以上内核版本的集群支持使用UNZIP函数。

查看企业版基础版湖仓版集群的内核版本,请执行SELECT adb_version();。如需升级内核版本,请联系技术支持。

查看和升级数仓版集群的内核版本,请参见查看和升级版本

UNZIP(VARBINARY X)
  • 命令说明:基于ZIP格式解压二进制字符串X,返回解压后的二进制字符串。

  • 返回值类型:VARBINARY。

  • 示例:

    SELECT UNZIP(ZIP(CAST('中国' AS VARBINARY)));

    返回结果如下:

    +---------------------------------------+
    | UNZIP(ZIP(CAST('中国' AS VARBINARY))) |
    +---------------------------------------+
    | 中国                                  | 
    +---------------------------------------+

UPPER

UPPER(VARBINARY X)        
  • 命令说明:返回参数X的大写形式。

  • 返回值类型:VARBINARY

  • 示例:

    SELECT UPPER(CAST('abc' AS VARBINARY));

    返回结果如下:

    +---------------------------------+
    | UPPER(CAST('abc' AS VARBINARY)) |
    +---------------------------------+
    | ABC                             | 
    +---------------------------------+

ZIP

重要

仅3.1.9.3及以上内核版本的集群支持使用ZIP函数。

查看企业版基础版湖仓版集群的内核版本,请执行SELECT adb_version();。如需升级内核版本,请联系技术支持。

查看和升级数仓版集群的内核版本,请参见查看和升级版本

ZIP(VARBINARY X)
  • 命令说明:基于ZIP格式压缩二进制字符串X,并将结果作为二进制字符串返回。

  • 返回值类型:VARBINARY。

  • 示例:

    SELECT UNZIP(ZIP(CAST('中国' AS VARBINARY)));

    返回结果如下:

    +---------------------------------------+
    | UNZIP(ZIP(CAST('中国' AS VARBINARY))) |
    +---------------------------------------+
    | 中国                                  | 
    +---------------------------------------+