BASE64_DECODE_BINARY
BASE64_DECODE_BINARY
Base64로 인코딩된 문자열을 이진(binary) 값으로 디코딩하는 문자열·이진 함수예요.
출처: 공식 문서
본문
Base64로 인코딩된 문자열을 이진 값으로 디코딩합니다.
참고 (See also): TRY_BASE64_DECODE_BINARY, BASE64_DECODE_STRING, BASE64_ENCODE
구문 (Syntax)
BASE64_DECODE_BINARY( <input> [ , <alphabet> ] )
인자 (Arguments)
필수:
Base64로 인코딩된 문자열 표현식입니다.
선택:
최대 세 개의 ASCII 문자로 구성된 문자열입니다:
문자열의 처음 두 문자는 입력을 인코딩하는 데 사용된 알파벳의 마지막 두 문자(인덱스 62와 63)를 지정합니다:
-
A to Z (indexes 0-25)
-
a to z (indexes 26-51)
-
0 to 9 (indexes 52-61)
-
- and / (indexes 62, 63)
기본값: + and /
문자열의 세 번째 문자는 패딩(padding)에 사용되는 문자를 지정합니다.
기본값: =
반환값 (Returns)
BINARY 값을 반환합니다. 예를 들어 이 값은 BINARY 타입의 열에 삽입될 수 있습니다.
사용 참고 사항 (Usage notes)
알파벳 문자열의 문자들은 위치적으로 파싱됩니다. 문자열의 두 번째 또는 세 번째 위치에 다른 문자를 지정하려면 기본값을 사용하더라도 그 앞에 오는 모든 문자를 명시적으로 지정해야 합니다.
예를 들어:
-
+$ 는 인덱스 62에 기본값(+)을 지정하고 인덱스 63에 다른 문자($)를 지정합니다. 패딩에 대해 명시적으로 문자가 지정되지 않아 기본 문자(=)가 사용됩니다.
-
+/% 는 인덱스 62와 63에 기본값(+ 및 /)을 지정하고, 패딩에 다른 문자(%)를 지정합니다.
입력을 디코딩하는 데 사용되는 알파벳 문자열은 입력을 원래 인코딩하는 데 사용된 문자열과 일치해야 합니다.
base64 형식에 대한 자세한 내용은 base64를 참고하세요.
예제 (Examples)
이 예제는 데이터를 문자열에서 이진으로 변환한 다음, 이진에서 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);
이제 원래 문자열, 문자열의 이진 형태(실제로는 16진수로 표시됨), 그리고 이진의 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번째 열의 순수 이진 값은 내부 이진 형태가 아니라 16진수로 표시된다는 점을 다시 참고하세요:
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 |
+------+----------+------------+----------------------------+----------------+
다음 예제는 앞선 예제와 비슷하지만, 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 문을 사용합니다. 순수 이진 값은 내부 이진 형태가 아닌 16진수로 표시된다는 점을 다시 참고하세요. 또한 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[]{};:,./<>?-=~ |
+-----------------------------------------------------------------------------------------+