に最終更新
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 | 测试 |
+---------------------------------+----------------------------------+