Categorias:

Funções de cadeia de caracteres e binários (Codificação/Decodificação)

BASE64_DECODE_BINARY

Decodifica uma cadeia de caracteres codificada em Base64 para uma binária.

Consulte também:

TRY_BASE64_DECODE_BINARY

BASE64_DECODE_STRING , BASE64_ENCODE

Sintaxe

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

Argumentos

Obrigatório:

input

Uma expressão de cadeia de caracteres codificada em Base64.

Opcional:

alphabet

Uma cadeia de caracteres que tem até três caracteres ASCII:

  • Os dois primeiros caracteres na cadeia de caracteres especificam os dois últimos caracteres (índices 62 e 63) no alfabeto usado para codificar a entrada:

    • A a Z (índices 0-25)

    • a a z (índices 26-51)

    • 0 a 9 (índices 52-61)

    • + e / (índices 62, 63)

    Padrões: + e /

  • O terceiro caractere na cadeia de caracteres especifica o caractere usado para preenchimento.

    Padrão: =

Retornos

Isto retorna um valor BINARY. O valor pode ser inserido em uma coluna do tipo BINARY, por exemplo.

Notas de uso

  • Os caracteres da cadeia de caracteres alphabet são analisados em posição; para especificar caracteres diferentes na segunda ou terceira posição da cadeia de caracteres, você deve especificar explicitamente todos os caracteres anteriores, mesmo que deseje usar os padrões.

    Por exemplo:

    • +$ especifica o padrão (+) para o índice 62 e um caractere diferente ($) para o índice 63; nenhum caractere é explicitamente especificado para preenchimento, portanto o caractere padrão (=) será usado.

    • +/% especifica os padrões (+ e /) para índices 62 e 63, e especifica um caractere diferente (%) para preenchimento.

  • A cadeia de caracteres alphabet usada para decodificar input deve corresponder à cadeia de caracteres originalmente usada para codificar input.

Para obter mais informações sobre o formato base64, consulte base64.

Exemplos

Este exemplo converte dados de cadeia de caracteres em binário, depois codifica de binário para uma cadeia de caracteres BASE64. Depois disso, ele decodifica a cadeia de caracteres Base64 de volta para o formato binário, e depois converte o binário de volta em uma cadeia de caracteres.

Criar uma tabela e dados. Isto inclui a conversão de uma cadeia de caracteres em binário e esse binário em uma cadeia de caracteres 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

Agora exiba a cadeia de caracteres original, a forma binária da cadeia de caracteres (que na verdade é exibida como hexadecimal), e depois a forma BASE64 do binário:

-- 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

Agora, recupere os dados e decodifique-os de volta à sua forma original. Observe novamente que os valores binários puros nas 2ª e 4ª colunas são exibidos como hexadecimais, não como a forma binária interna:

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

O próximo exemplo é semelhante ao exemplo anterior, mas especifica o parâmetro alphabet para indicar que ‘$’ deve ser o caractere codificador do índice 62 na codificação BASE64. A fim de ter dados diversificados o suficiente para precisar do índice 62, a cadeia de caracteres de dados utiliza um número maior de caracteres distintos.

Criar uma tabela e dados. Isto inclui a conversão de uma cadeia de caracteres em binário e esse binário em uma cadeia de caracteres 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

Agora, recupere os dados e decodifique-os de volta à sua forma original. Como estas colunas de saída são muito amplas, este exemplo faz cinco instruções SELECT separadas em vez de uma. Observe novamente que os valores binários puros são exibidos como hexadecimais, não como a forma binária interna. Observe também o sinal de dólar (‘$’) na cadeia de caracteres BASE64 (a terceira saída abaixo):

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