카테고리:

문자열 및 이진 함수 (인코딩/디코딩)

BASE64_DECODE_BINARY

Base64로 인코딩된 문자열을 이진으로 디코딩합니다.

참고 항목:

TRY_BASE64_DECODE_BINARY

BASE64_DECODE_STRING , BASE64_ENCODE

구문

BASE64_DECODE_BINARY( <input> [ , <alphabet> ] )
Copy

인자

필수:

input

Base64로 인코딩된 문자열 식입니다.

선택 사항:

alphabet

최대 3개의 ASCII 문자로 구성된 문자열:

  • 문자열의 처음 두 문자는 입력을 인코딩하는 데 사용되는 알파벳의 마지막 두 문자(인덱스 62 및 63)를 지정합니다.

    • A ~ Z (인덱스 0-25)

    • a ~ z (인덱스 26-51)

    • 0 ~ 9 (인덱스 52-61)

    • +/ (인덱스 62, 63)

    기본값: +/

  • 문자열의 세 번째 문자는 패딩에 사용되는 문자를 지정합니다.

    기본값: =

반환

이는 BINARY 값을 반환합니다. 예를 들어, 값은 BINARY 형식의 열에 삽입될 수 있습니다.

사용법 노트

  • alphabet 문자열의 문자는 위치적으로 구문 분석됩니다. 문자열의 두 번째 또는 세 번째 위치에 다른 문자를 지정하려면, 기본값을 사용하려는 경우에도 앞의 모든 문자를 명시적으로 지정해야 합니다.

    예:

    • +$ 는 인덱스 62에 대해 기본값(+)을 지정하고 인덱스 63에 대해 다른 문자($)를 지정합니다. 패딩에 대해 명시적으로 지정된 문자가 없으므로 기본 문자(=)가 사용됩니다.

    • +/% 는 인덱스 62 및 63에 대한 기본값(+/)을 지정하고 패딩에 대해 다른 문자(%)를 지정합니다.

  • alphabet 을 디코딩하는 데 사용되는 input 문자열은 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);
Copy

이제 원래 문자열, 문자열의 이진 형식(실제로 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==   |
+------+----------+------------+
Copy

이제 데이터를 검색하고 원래 형식으로 다시 디코딩합니다. 두 번째 및 네 번째 열의 순수 이진 값은 내부 이진 형식이 아니라 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           |
+------+----------+------------+----------------------------+----------------+
Copy

다음 예는 앞의 예와 유사하지만, ‘$’가 BASE64 인코딩의 인덱스 62에 대한 인코딩 문자여야 함을 나타내기 위해 alphabet 매개 변수를 지정합니다. 인덱스 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, '$');
Copy

이제 데이터를 검색하고 원래 형식으로 다시 디코딩합니다. 이 출력 열이 너무 넓기 때문에 이 예에서는 하나가 아닌 다섯 개의 개별 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[]{};:,./<>?-=~ |
+-----------------------------------------------------------------------------------------+
Copy