최종 수정: 에
FROM_BASE64
설명
FROM_BASE64 함수는 Base64로 인코딩된 문자열을 원래 문자열로 디코딩합니다. 이 함수는 TO_BASE64의 역연산을 수행하며 RFC 4648 표준을 따릅니다. Base64 인코딩은 텍스트 프로토콜에서 바이너리 데이터를 전송하는 데 흔히 사용되며, 이 함수는 인코딩된 데이터를 복원할 수 있습니다. 표준 Base64 문자 집합(A-Z, a-z, 0-9, +, /)과 패딩 문자(=)를 지원합니다.
구문
FROM_BASE64(<str>)
매개변수
| 매개변수 | 설명 |
|---|---|
<str> | 디코딩할 Base64 인코딩 문자열. 타입: VARCHAR |
반환값
Base64 디코딩 후의 원래 문자열을 나타내는 VARCHAR 값을 반환합니다.
디코딩 규칙:
- 표준 Base64 문자 집합 허용: A-Z, a-z, 0-9, +, /
- 패딩 문자 = 지원
- RFC 4648 표준 준수
- 입력 길이는 4의 배수여야 함(빈 문자열 제외)
- 디코딩 결과에 출력 불가능한 문자가 포함될 수 있음
특수한 경우:
- 입력이 NULL이면 NULL 반환
- 입력에 허용되지 않는 Base64 문자가 포함되어 있으면 NULL 반환(공백 및 줄바꿈 같은 공백 문자 포함)
- 입력이 빈 문자열이면 빈 문자열 반환
- 입력 길이가 4의 배수가 아니면 NULL 반환
- 패딩이 올바르지 않거나 형식이 유효하지 않으면 NULL 반환
버전 참고 사항 (4.0.8)
버전 4.0.8에서는 FROM_BASE64의 디코딩 버퍼 크기 계산을 수정하고 잘못된 입력의 처리 방식을 명확히 했습니다. 길이가 4의 배수가 아닌 입력은 즉시 NULL을 반환합니다. 이전에는 버퍼 크기를 입력 길이의 절반으로 설정하여 크기가 너무 작았기 때문에, 잘못된 입력으로 인해 버퍼 범위를 벗어난 쓰기가 발생할 수 있었습니다. TO_BASE64의 인코딩 버퍼 크기 계산도 같은 버전에서 수정되었습니다.
예제
- 기본 디코딩
SELECT FROM_BASE64('MQ=='), FROM_BASE64('QQ==');
+---------------------+---------------------+
| FROM_BASE64('MQ==') | FROM_BASE64('QQ==') |
+---------------------+---------------------+
| 1 | A |
+---------------------+---------------------+
- 여러 문자 디코딩
SELECT FROM_BASE64('MjM0'), FROM_BASE64('SGVsbG8=');
+---------------------+-------------------------+
| FROM_BASE64('MjM0') | FROM_BASE64('SGVsbG8=') |
+---------------------+-------------------------+
| 234 | Hello |
+---------------------+-------------------------+
- NULL 값 처리
SELECT FROM_BASE64(NULL);
+-------------------+
| FROM_BASE64(NULL) |
+-------------------+
| NULL |
+-------------------+
- 빈 문자열 처리
SELECT FROM_BASE64('');
+-----------------+
| FROM_BASE64('') |
+-----------------+
| |
+-----------------+
- 허용되지 않는 문자 처리
SELECT FROM_BASE64('!!!'), FROM_BASE64('ABC@DEF');
+--------------------+------------------------+
| FROM_BASE64('!!!') | FROM_BASE64('ABC@DEF') |
+--------------------+------------------------+
| NULL | NULL |
+--------------------+------------------------+
- 긴 페이로드
SELECT FROM_BASE64('SGVsbG8gV29ybGQ='), FROM_BASE64('VGhlIHF1aWNrIGJyb3duIGZveA==');
+---------------------------------+---------------------------------------------+
| FROM_BASE64('SGVsbG8gV29ybGQ=') | FROM_BASE64('VGhlIHF1aWNrIGJyb3duIGZveA==') |
+---------------------------------+---------------------------------------------+
| Hello World | The quick brown fox |
+---------------------------------+---------------------------------------------+
- UTF-8 멀티바이트 페이로드
SELECT FROM_BASE64('4bmt4bmbw6w='), FROM_BASE64('4biN4biNdW1haSBoZWxsbw==');
+-----------------------------+-----------------------------------------+
| FROM_BASE64('4bmt4bmbw6w=') | FROM_BASE64('4biN4biNdW1haSBoZWxsbw==') |
+-----------------------------+-----------------------------------------+
| ṭṛì | ḍḍumai hello |
+-----------------------------+-----------------------------------------+
- 이메일 주소
SELECT FROM_BASE64('dXNlckBleGFtcGxlLmNvbQ=='), FROM_BASE64('YWRtaW4udGVzdEBjb21wYW55Lm9yZw==');
+-----------------------------------------+-------------------------------------------------+
| FROM_BASE64('dXNlckBleGFtcGxlLmNvbQ==') | FROM_BASE64('YWRtaW4udGVzdEBjb21wYW55Lm9yZw==') |
+-----------------------------------------+-------------------------------------------------+
| user@example.com | admin.test@company.org |
+-----------------------------------------+-------------------------------------------------+
- JSON 페이로드
SELECT FROM_BASE64('eyJuYW1lIjoiSm9obiIsImFnZSI6MzB9'), FROM_BASE64('WzEsMiwzLDQsNV0=');
+-------------------------------------------------+---------------------------------+
| FROM_BASE64('eyJuYW1lIjoiSm9obiIsImFnZSI6MzB9') | FROM_BASE64('WzEsMiwzLDQsNV0=') |
+-------------------------------------------------+---------------------------------+
| {"name":"John","age":30} | [1,2,3,4,5] |
+-------------------------------------------------+---------------------------------+
TO_BASE64를 사용한 왕복 변환
SELECT FROM_BASE64(TO_BASE64('Hello')), FROM_BASE64(TO_BASE64('测试'));
+---------------------------------+----------------------------------+
| FROM_BASE64(TO_BASE64('Hello')) | FROM_BASE64(TO_BASE64('测试')) |
+---------------------------------+----------------------------------+
| Hello | 测试 |
+---------------------------------+----------------------------------+