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[]{};:,./<>?-=~ |
+-----------------------------------------------------------------------------------------+

더 알아보기 (Learn more)