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