- 类别:
字符串和二进制函数 (编码/解码)
BASE64_DECODE_BINARY¶
将 Base64 编码的字符串解码为二进制值。
语法¶
BASE64_DECODE_BINARY( <input> [ , <alphabet> ] )
实参¶
必填:
input
Base64 编码的字符串表达式。
可选:
alphabet
至多由三个 ASCII 字符组成的字符串:
字符串中的前两个字符指定用于编码输入的字母表中的最后两个字符(索引 62 和 63):
A
至Z
(索引 0-25)a
至z
(索引 26-51)0
至9
(索引 52-61)+
和/
(索引 62、63)
默认字符:
+
和/
字符串中的第三个字符指定用于填充的字符。
默认:
=
返回¶
这会返回 BINARY
值。例如,可以将该值插入到 BINARY
类型的列中。
使用说明¶
alphabet
字符串中的字符是按位置解析的;要在字符串的第二或第三位置指定不同的字符,必须明确指定所有前面的字符,即使希望使用默认值也一样。例如:
+$
为索引 62 指定默认字符 (+
),为索引 63 指定不同字符 ($
);没有为填充明确指定字符,因此使用默认字符 (=
)。+/%
为索引 62 和 63 指定默认字符(+
和/
),并为填充指定不同字符 (%
)。
用于解码
input
的alphabet
字符串 必须 与最初用于编码input
的字符串相匹配。
有关 base64 格式的更多信息,请参阅 base64。
示例¶
本示例将数据从字符串转换为二进制,然后从二进制编码为 BASE64 字符串。之后,它将 base64 字符串解码回二进制,然后将二进制转换回字符串。
创建表和数据。这包括将字符串转换为二进制,并将该二进制字符串转换为 BASE64 字符串:
CREATE OR REPLACE TABLE binary_table (v VARCHAR, b BINARY, b64_string VARCHAR); INSERT INTO binary_table (v) VALUES ('HELP'); UPDATE binary_table SET b = TO_BINARY(v, 'UTF-8'); UPDATE binary_table SET b64_string = BASE64_ENCODE(b);现在显示原始字符串、字符串的二进制形式(实际上显示为十六进制),然后是二进制的 BASE64 形式:
-- Note that the binary data in column b is displayed in hexadecimal -- format to make it human-readable. SELECT v, b, b64_string FROM binary_table; +------+----------+------------+ | V | B | B64_STRING | |------+----------+------------| | HELP | 48454C50 | SEVMUA== | +------+----------+------------+现在,检索数据并将其解码回其原始形式。再次注意,第 2 列和第 4 列中的纯二进制值显示为十六进制,而不是内部二进制形式:
SELECT v, b, b64_string, BASE64_DECODE_BINARY(b64_string) AS FROM_BASE64_BACK_TO_BINARY, TO_VARCHAR(BASE64_DECODE_BINARY(b64_string), 'UTF-8') AS BACK_TO_STRING FROM binary_table; +------+----------+------------+----------------------------+----------------+ | V | B | B64_STRING | FROM_BASE64_BACK_TO_BINARY | BACK_TO_STRING | |------+----------+------------+----------------------------+----------------| | HELP | 48454C50 | SEVMUA== | 48454C50 | HELP | +------+----------+------------+----------------------------+----------------+
下一个示例与前面的示例类似,但指定 alphabet
参数以指示“$”应为 BASE64 编码中索引 62 的编码字符。为了具有需要索引 62 的足够多样化的数据,数据字符串使用大量不同的字符。
创建表和数据。这包括将字符串转换为二进制,并将该二进制字符串转换为 BASE64 字符串:
SET MY_STRING = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()abcdefghijklmnopqrstuvwzyz1234567890[]{};:,./<>?-=~'; CREATE OR REPLACE TABLE binary_table (v VARCHAR, b BINARY, b64_string VARCHAR); INSERT INTO binary_table (v) VALUES ($MY_STRING); UPDATE binary_table SET b = TO_BINARY(v, 'UTF-8'); UPDATE binary_table SET b64_string = BASE64_ENCODE(b, 0, '$');现在,检索数据并将其解码回其原始形式。由于此输出列非常宽,因此此示例执行五个单独的 SELECT 语句,而不是一个。请再次注意,纯二进制值显示为十六进制,而不是内部二进制形式。还请注意,BASE64 字符串中的美元符号(“$”)(下面的第三个输出):
SELECT v FROM binary_table; +-----------------------------------------------------------------------------------------+ | V | |-----------------------------------------------------------------------------------------| | ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()abcdefghijklmnopqrstuvwzyz1234567890[]{};:,./<>?-=~ | +-----------------------------------------------------------------------------------------+ SELECT b FROM binary_table; +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | B | |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 4142434445464748494A4B4C4D4E4F505152535455565758595A21402324255E262A28296162636465666768696A6B6C6D6E6F70717273747576777A797A313233343536373839305B5D7B7D3B3A2C2E2F3C3E3F2D3D7E | +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ SELECT b64_string FROM binary_table; +----------------------------------------------------------------------------------------------------------------------+ | B64_STRING | |----------------------------------------------------------------------------------------------------------------------| | QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVohQCMkJV4mKigpYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd6eXoxMjM0NTY3ODkwW117fTs6LC4vPD4/LT1$ | +----------------------------------------------------------------------------------------------------------------------+ SELECT BASE64_DECODE_BINARY(b64_string, '$') AS FROM_BASE64_BACK_TO_BINARY FROM binary_table; +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | FROM_BASE64_BACK_TO_BINARY | |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 4142434445464748494A4B4C4D4E4F505152535455565758595A21402324255E262A28296162636465666768696A6B6C6D6E6F70717273747576777A797A313233343536373839305B5D7B7D3B3A2C2E2F3C3E3F2D3D7E | +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ SELECT TO_VARCHAR(BASE64_DECODE_BINARY(b64_string, '$'), 'UTF-8') AS BACK_TO_STRING FROM binary_table; +-----------------------------------------------------------------------------------------+ | BACK_TO_STRING | |-----------------------------------------------------------------------------------------| | ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()abcdefghijklmnopqrstuvwzyz1234567890[]{};:,./<>?-=~ | +-----------------------------------------------------------------------------------------+