Catégories :

Fonctions de chaîne et fonctions binaires (Encodage/Décodage)

BASE64_DECODE_BINARY

Décode une chaîne codée en Base64 en binaire.

Voir aussi :

TRY_BASE64_DECODE_BINARY

BASE64_DECODE_STRING , BASE64_ENCODE

Syntaxe

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

Arguments

Obligatoire :

input

Une expression de chaîne codée en Base64.

Facultatif :

alphabet

Une chaîne composée de trois caractères ASCII maximum :

  • Les deux premiers caractères de la chaîne spécifient les deux derniers caractères (index 62 et 63) de l’alphabet utilisé pour coder l’entrée :

    • A à Z (index 0-25)

    • a à z (index 26-51)

    • 0 à 9 (index 52-61)

    • + et / (index 62, 63)

    Valeurs par défaut : + et /

  • Le troisième caractère de la chaîne spécifie le caractère utilisé pour le remplissage.

    Par défaut : =

Renvoie

Cela renvoie une valeur BINARY. La valeur peut être insérée dans une colonne de type BINARY, par exemple.

Notes sur l’utilisation

  • Les caractères de la chaîne alphabet sont analysés en ce qui concerne leur position ; pour spécifier des caractères différents à la deuxième ou troisième position de la chaîne, vous devez spécifier explicitement tous les caractères précédents, même si vous souhaitez utiliser les valeurs par défaut.

    Par exemple :

    • +$ spécifie la valeur par défaut (+) pour l’index 62 et un caractère différent ($) pour l’index 63 ; aucun caractère n’est explicitement spécifié pour le remplissage, donc le caractère par défaut (=) est utilisé.

    • +/% spécifie les valeurs par défaut (+ et /) pour les index 62 et 63 et spécifie un caractère différent (%) pour le remplissage.

  • La chaîne alphabet utilisée pour décoder input doit correspondre à la chaîne utilisée à l’origine pour coder input.

Pour plus d’informations sur le format base64, voir base64.

Exemples

Cet exemple convertit des données de chaîne au format binaire, puis les encode du format binaire en chaîne BASE64. Ensuite, il décode la chaîne base64 au format binaire, puis la reconvertit en chaîne.

Créer une table et des données. Cela inclut la conversion d’une chaîne au format binaire et ce format binaire en une chaîne 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

Afficher maintenant la chaîne d’origine, la forme binaire de la chaîne (qui est actuellement affichée sous forme hexadécimale), puis la forme BASE64 du binaire :

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

Maintenant, récupérer les données et les décoder à leur forme d’origine. Noter à nouveau que les valeurs binaires pures des deuxième et quatrième colonnes sont affichées sous forme hexadécimale et non sous forme binaire interne :

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

L’exemple suivant est similaire à l’exemple précédent, mais spécifie le paramètre alphabet pour indiquer que « $ » doit être le caractère d’encodage pour l’index 62 dans l’encodage BASE64. Afin de disposer de suffisamment de données pour avoir besoin de l’index 62, la chaîne de données utilise un plus grand nombre de caractères distincts.

Créer une table et des données. Cela inclut la conversion d’une chaîne au format binaire et ce format binaire en une chaîne 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

Maintenant, récupérer les données et les décoder à leur forme d’origine. Les colonnes de sortie étant très larges, cet exemple exécute cinq instructions SELECT distinctes au lieu d’une. Noter à nouveau que les valeurs binaires pures sont affichées sous forme hexadécimale et non sous forme binaire interne. Noter également le signe dollar (“$”) dans la chaîne BASE64 (la troisième sortie ci-dessous) :

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