全部產品
Search
文件中心

AnalyticDB:可變長二進位函數

更新時間:Sep 10, 2024

可變長二進位函數用於處理位元據類型(如BINARY、VARBINARY、BLOB等),比如加解密、提取子串、計算長度等。本文介紹AnalyticDB for 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,並將結果作為二進位字串返回。

注意事項

部分函數因不同用戶端解析的編碼不同,可能會出現傳回值不一樣,會將“China”解析為"0x4368696E61"。本文中的所有樣本的返回結果均以DMS中的結果為例。

AES_DECRYPT

AES_DECRYPT(VARBINARY X, VARCHAR Y)
  • 命令說明:使用AES演算法解密XY為密鑰。

  • 傳回值類型:VARBINARY

  • 樣本:

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

    返回結果如下:

    +-----------------------------------------------------------------------------+
    | HEX(AES_DECRYPT(AES_ENCRYPT(CAST('China' AS VARBINARY), '0123'),'0123'))    |
    +-----------------------------------------------------------------------------+
    |   4368696E61                                                                |
    +-----------------------------------------------------------------------------+

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('CF3AB34E18CD73CE37D46AD2588BA258'),'key_string') AS CHAR);

    返回結果如下:

    +---------------------------------------------------------------------------------------+
    | CAST(AES_DECRYPT_MY(UNHEX('CF3AB34E18CD73CE37D46AD2588BA258'),'key_string') AS CHAR)  |
    +---------------------------------------------------------------------------------------+
    | China                                                                                 |
    +---------------------------------------------------------------------------------------+

AES_ENCRYPT

AES_ENCRYPT(VARBINARY X, VARCHAR Y)
  • 命令說明:使用AES演算法加密XY為密鑰。

  • 傳回值類型:VARBINARY

  • 樣本:

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

    返回結果如下:

    +-------------------------------------------------------+
    |HEX(AES_ENCRYPT(CAST('China' AS VARBINARY), '0123'))   |
    +-------------------------------------------------------+
    | 6C5CB5E59E3EA58E58CFBE3C76BFBECA                      |
    +-------------------------------------------------------+

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('China', 'key_string'));

    返回結果如下:

    +-------------------------------------------------------+
    |HEX(AES_ENCRYPT_MY('China', 'key_string'))             |
    +-------------------------------------------------------+
    |CF3AB34E18CD73CE37D46AD2588BA258                       | 
    +-------------------------------------------------------+

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 HEX(COMPRESS(CAST('China' AS VARBINARY)));               

    返回結果如下:

    +--------------------------------------------+
    | HEX(COMPRESS(CAST('China' AS VARBINARY)))  |
    +--------------------------------------------+
    |  05000000789C73CEC8CC4B0400056C01E4        |
    +--------------------------------------------+

CRC32

CRC32(VARBINARY X)        
  • 命令說明:返回參數X的迴圈冗餘碼。

  • 傳回值類型:LONG

  • 樣本:

    SELECT CRC32(CAST('China' AS VARBINARY));

    返回結果:

    +------------------------------------+
    | CRC32(CAST('China' AS VARBINARY))  |
    +------------------------------------+
    | 2704207136                         | 
    +------------------------------------+

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('China' AS VARBINARY)));

    返回結果如下:

    +--------------------------------------------+
    | GUNZIP(GZIP(CAST('China' AS VARBINARY)))   |
    +--------------------------------------------+
    | China                                      |  
    +--------------------------------------------+

GZIP

重要

僅3.1.9.3及以上核心版本的叢集支援使用GZIP函數。

查看湖倉版叢集的核心版本,請執行SELECT adb_version();。如需升級核心版本,請聯絡支援人員。

查看和升級數倉版叢集的核心版本,請參見查看和升級版本

GZIP(VARBINARY X)
  • 命令說明:基於GZIP格式壓縮二進位字串X,並將結果作為二進位字串返回。

  • 傳回值類型:VARBINARY。

  • 樣本:

    SELECT HEX(GZIP(CAST('China' AS VARBINARY)));

    返回結果如下:

    +------------------------------------------------------+
    | HEX(GZIP(CAST('China' AS VARBINARY)))                |
    +------------------------------------------------------+
    |1F8B080000000000000073CEC8CC4B040020ED2EA105000000    | 
    +------------------------------------------------------+

HEX

HEX(VARBINARY X)
  • 命令說明:將字串X或數字轉換為十六進位格式的字串。

  • 傳回值類型:VARCHAR

  • 樣本:

    SELECT HEX(CAST('China' AS VARBINARY));

    返回結果如下:

    +----------------------------------+
    | HEX(CAST('China' AS VARBINARY))  |
    +----------------------------------+
    |  4368696E61                      | 
    +----------------------------------+

LEFT

LEFT(VARBINARY X, BIGINT Y)
LEFT(VARBINARY X, DOUBLE Y)
  • 命令說明:返回字串X最左邊的Y個字元。

  • 傳回值類型:BLOB

  • 樣本:

    SELECT LEFT(CAST('China' AS VARBINARY),1000);

    返回結果如下:

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

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('China' AS VARBINARY), 7,'-'));

    返回結果如下:

    +------------------------------------------------+
    | HEX(LPAD(CAST('China' AS VARBINARY), 7, '-'))  |
    +------------------------------------------------+
    | 2D2D4368696E61                                 | 
    +------------------------------------------------+

LTRIM

LTRIM(VARBINARY X)       
  • 命令說明:移除字串X左邊的空白字元。

  • 傳回值類型:BLOB

  • 樣本:

    SELECT LTRIM(CAST('  China  ' AS VARBINARY));

    返回結果如下:

    +----------------------------------------+
    | LTRIM(CAST('  China  ' AS VARBINARY))  |
    +----------------------------------------+
    | China                                  |
    +----------------------------------------+

MD5

MD5(VARBINARY X)          
  • 命令說明:返回參數XMD5的hash值。

  • 傳回值類型:VARCHAR

  • 樣本:

    SELECT MD5(CAST('China' AS VARBINARY));

    返回結果如下:

    +----------------------------------+
    | MD5(CAST('China' AS VARBINARY))  |
    +----------------------------------+
    | ae54a5c026f31ada088992587d92cb3a | 
    +----------------------------------+

ORD

ORD(VARBINARY X)         
  • 命令說明:如果字串X最左邊的字元是多位元組字元,則返回該字元的代碼。

  • 傳回值類型:LONG

  • 樣本:

    SELECT ORD(CAST('China' AS VARBINARY));

    返回結果如下:

    +----------------------------------+
    | ORD(CAST('China' AS VARBINARY))  |
    +----------------------------------+
    |67                                | 
    +----------------------------------+

REPEAT

REPEAT(VARBINARY X, DOUBLE Y)
REPEAT(VARBINARY X, BIGINT Y)
  • 命令說明:返回重複指定次數Y的字串X

  • 傳回值類型:VARBINARY

  • 樣本:

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

    返回結果如下:

    +---------------------------------------------+
    | HEX(REPEAT(CAST('China' AS VARBINARY), 1))  |
    +---------------------------------------------+
    |  4368696E61                                 | 
    +---------------------------------------------+

REVERSE

REVERSE(VARBINARY X)
  • 命令說明:反轉字串X中的字元。

  • 傳回值類型:VARBINARY

  • 樣本:

    SELECT HEX(REVERSE(CAST('China' AS VARBINARY)));

    返回結果如下:

    +-------------------------------------------+
    | HEX(REVERSE(CAST('China' AS VARBINARY)))  |
    +-------------------------------------------+
    |  616E696843                               |
    +-------------------------------------------+

RIGHT

RIGHT(VARBINARY X, BIGINT Y)
RIGHT(VARBINARY X, DOUBLE Y)
  • 命令說明:返回字串X最右邊的Y個字元。

  • 傳回值類型:VARBINARY

  • 樣本:

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

    返回結果如下:

    +--------------------------------------------+
    | HEX(RIGHT(CAST('China' AS VARBINARY), 1))  |
    +--------------------------------------------+
    | 61                                         |
    +--------------------------------------------+

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('China' AS VARBINARY), 4.7,'x'));

    返回結果如下:

    +--------------------------------------------------+
    | HEX(RPAD(CAST('China' AS VARBINARY), 4.7, 'x'))  |
    +--------------------------------------------------+
    | 4368696E61                                       | 
    +--------------------------------------------------+

RTRIM

RTRIM(VARBINARY X)
  • 命令說明:移除字串X右邊的空白字元。

  • 傳回值類型:BLOB

  • 樣本:

    SELECT RTRIM(CAST('  China  ' AS VARBINARY));

    返回結果如下:

    +----------------------------------------+
    | RTRIM(CAST('  China  ' AS VARBINARY))  |
    +----------------------------------------+
    |   China                                | 
    +----------------------------------------+

SHA1

SHA1(VARBINARY X)         
  • 命令說明:計算字串X的SHA-1校正和。

  • 傳回值類型:VARCHAR

  • 樣本:

    SELECT SHA1(CAST('China' AS VARBINARY));

    返回結果如下:

    +------------------------------------------+
    | SHA1(CAST('China' AS VARBINARY))         |
    +------------------------------------------+
    | d2eaf2aa1512d6596e0a5bae633537c6b8e779a3 |      
    +------------------------------------------+

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('China' AS VARBINARY),256);

    返回結果如下:

    +------------------------------------------------------------------+
    | SHA2(CAST('China' AS VARBINARY),256)                            |
    +------------------------------------------------------------------+
    | 10436829032f361a3de50048de41755140e581467bc1895e6c1a17f423e42d10 |
    +------------------------------------------------------------------+

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

  • 樣本:

TO_BASE64

TO_BASE64(VARBINARY X)
  • 命令說明:返回字串X的BASE64編碼形式。

  • 傳回值類型:VARCHAR

  • 樣本:

    SELECT TO_BASE64(CAST('China' AS VARBINARY));

    返回結果如下:

    +----------------------------------------+
    | TO_BASE64(CAST('China' AS VARBINARY))  |
    +----------------------------------------+
    | Q2hpbmE=                               |
    +----------------------------------------+

TRIM

TRIM(VARBINARY X)
  • 命令說明:移除字串X左右兩邊的空白字元。

  • 傳回值類型:BLOB

  • 樣本:

    SELECT TRIM(CAST('  China  ' AS VARBINARY));

    返回結果如下:

    +---------------------------------------+
    | TRIM(CAST('  China  ' AS VARBINARY))  |
    +---------------------------------------+
    | China                                 | 
    +---------------------------------------+

UNCOMPRESS

UNCOMPRESS(VARBINARY X)           
  • 命令說明:解壓縮XCOMPRESS()函數壓縮的字串。

  • 傳回值類型:BLOB

  • 樣本:

    SELECT UNCOMPRESS(COMPRESS(CAST('China' AS VARBINARY)));

    返回結果如下:

    +---------------------------------------------------+
    | UNCOMPRESS(COMPRESS(CAST('China' AS VARBINARY)))  |
    +---------------------------------------------------+
    | China                                             | 
    +---------------------------------------------------+

UNCOMPRESSED_LENGTH

UNCOMPRESSED_LENGTH(VARBINARY X)
  • 命令說明:在壓縮之前返回字串X的長度。

  • 傳回值類型:LONG

  • 樣本:

    SELECT UNCOMPRESSED_LENGTH(COMPRESS(CAST('China' AS VARBINARY)));

    返回結果如下:

    +------------------------------------------------------------+
    | UNCOMPRESSED_LENGTH(COMPRESS(CAST('China' AS VARBINARY)))  |
    +------------------------------------------------------------+
    | 5                                                          |
    +------------------------------------------------------------+

UNHEX

UNHEX(VARBINARY X)         
  • 命令說明:將參數X中的每對字元解釋為十六進位數,並將其轉換為數字表示的位元組,以二進位字串將其返回。

  • 傳回值類型:VARBINARY

  • 樣本:

    SELECT UNHEX(CAST('China' AS VARBINARY));

    返回結果如下:

    +------------------------------------+
    | UNHEX(CAST('China' AS VARBINARY))  |
    +------------------------------------+
    | NULL                               |  
    +------------------------------------+

UNZIP

重要

僅3.1.9.3及以上核心版本的叢集支援使用UNZIP函數。

查看湖倉版叢集的核心版本,請執行SELECT adb_version();。如需升級核心版本,請聯絡支援人員。

查看和升級數倉版叢集的核心版本,請參見查看和升級版本

UNZIP(VARBINARY X)
  • 命令說明:基於ZIP格式解壓二進位字串X,返回解壓後的二進位字串。

  • 傳回值類型:VARBINARY。

  • 樣本:

    SELECT UNZIP(ZIP(CAST('China' AS VARBINARY)));

    返回結果如下:

    +---------------------------------------+
    | UNZIP(ZIP(CAST('China' AS VARBINARY)))|
    +---------------------------------------+
    | China                                 | 
    +---------------------------------------+

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('China' AS VARBINARY)));

    返回結果如下:

    +---------------------------------------+
    | UNZIP(ZIP(CAST('China' AS VARBINARY)))|
    +---------------------------------------+
    | China                                 | 
    +---------------------------------------+