【发布时间】:2018-05-21 18:52:24
【问题描述】:
我在 oracle 表中存在 base 64 加密数据格式的数据。此数据存在于 clob 字段中。
create table tableA
(
id number,
encoded_description clob);
insert into tableA
(id, encoded_description)
values
(1, 'Zm9sbG93IHVw');
insert into tableA
(id, encoded_description)
values
(2, 'dG8gbWFueSByZWQgZmxhZ3M=');
commit;
Table A output which contains base64 encoded data in encoded_description field:
Table A:
ID, encoded_description
1 Zm9sbG93IHVw
2 dG8gbWFueSByZWQgZmxhZ3M=
create table tableB
(
id number,
decoded_description clob);
Table B: output after conversion
ID, Decoded_description
1 <<Original Text>>
2 <<Original Text>>
我想通过将 clob 字段中的 base64 数据解码为其原始文本形式,将 tableA 中的数据加载到 tableB 中。我怎样才能做到这一点?我可以使用任何 oracle 函数来执行此转换吗?请帮忙
【问题讨论】:
-
(迂腐评论):Base64 不是“加密”,而是“编码”。
-
这里缺少一些东西:步骤#1,当你解码 Base64 时,你会得到二进制数据(不是字符)。然后,第 2 步,您需要将二进制转换为 varchar,方法是使用...哪个编码? UTF-8、ASCII、ISO-8859-1、其他?
-
实际上有一个内置的utl_encode.base64_decode,但它解码为字节,而不是字符。您可以使用 utl_raw.cast_to_raw 和 utl_raw.cast_to_varchar2 来回切换,但您可能会得到垃圾,除非它确实是经过编码的纯文本,这将毫无意义。
-
@TheImpaler 转换为 UTF-8
标签: sql oracle encoding base64