カテゴリ:

文字列とバイナリ関数 (エンコード/デコード)

BASE64_DECODE_BINARY

Base64でエンコードされた文字列をバイナリにデコードします。

こちらもご参照ください。

TRY_BASE64_DECODE_BINARY

BASE64_DECODE_STRINGBASE64_ENCODE

構文

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

引数

必須:

input

Base64でエンコードされた文字列式です。

オプション:

alphabet

最大3つの ASCII 文字で構成される文字列です。

  • 文字列の最初の2文字は、入力のエンコードに使用されるアルファベットの最後の2文字(インデックス62および63)を指定します。

    • A から Z (インデックス0~25)

    • a から z (インデックス26~51)

    • 0 から 9 (インデックス52~61)

    • + および / (インデックス62、63)

    デフォルト: + および /

  • 文字列の3番目の文字は、パディングに使用される文字を指定します。

    デフォルト: =

戻り値

これは BINARY 値を返します。例えば、値は BINARY 型の列に挿入できます。

使用上の注意

  • alphabet 文字列の文字は位置的に解析されます。文字列の2番目または3番目の位置に異なる文字を指定するには、デフォルトを使用する場合でも、先行するすべての文字を明示的に指定する必要があります。

    例:

    • +$ は、インデックス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

データを取得して、元の形式にデコードします。繰り返しますが、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           |
+------+----------+------------+----------------------------+----------------+
Copy

次の例は前の例と似ていますが、 alphabet パラメーターを指定して、「$」が 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, '$');
Copy

データを取得して、元の形式にデコードします。この出力列は幅が広いため、この例では1つではなく5つの個別の SELECT ステートメントを実行します。純粋なバイナリ値は内部バイナリ形式としてではなく、16進数として表示されます。BASE64 文字列のドル記号(「$」)にも注意してください(以下の3番目の出力)。

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