- カテゴリ:
文字列とバイナリ関数 (エンコード/デコード)
BASE64_DECODE_BINARY¶
Base64でエンコードされた文字列をバイナリにデコードします。
- こちらもご参照ください。
構文¶
BASE64_DECODE_BINARY( <input> [ , <alphabet> ] )
引数¶
必須:
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);元の文字列、文字列のバイナリ形式(実際には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== | +------+----------+------------+データを取得して、元の形式にデコードします。繰り返しますが、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 | +------+----------+------------+----------------------------+----------------+
次の例は前の例と似ていますが、 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, '$');データを取得して、元の形式にデコードします。この出力列は幅が広いため、この例では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[]{};:,./<>?-=~ | +-----------------------------------------------------------------------------------------+