可變長二進位函數用於處理位元據類型(如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演算法解密
X
,Y
為密鑰。傳回值類型: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演算法解密
X
,Y
為密鑰。傳回值類型: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演算法加密
X
,Y
為密鑰。傳回值類型: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演算法加密
X
,Y
為密鑰。傳回值類型: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)
命令說明:返回參數
X
MD5的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)
命令說明:計算字串
X
SHA-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)
命令說明:解壓縮
X
由COMPRESS()
函數壓縮的字串。傳回值類型: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 | +---------------------------------------+