转换功能不适用于CLOB数据类型

时间:2018-08-29 09:12:52

标签: sql oracle plsql

我们有一些lob和varchar2类型的数据被错误地编码为AL32UTF8,我们需要将其编码转换为we8mswin1252字符集。 我有用于字符集转换的转换函数,该函数在varchar2数据类型上正常工作,但与CLOB一起使用时会产生一些模糊字符。 我当前的编码是AL32UTF8。

 select value,CONVERT(value,'we8mswin1252','AL32UTF8'),CONVERT(to_clob(value),'we8mswin1252','AL32UTF8') from temp;

enter image description here

数据库:Oracle 12c

select * from nls_database_parameters where parameter like  '%CHARACTERSET%';

enter image description here

1 个答案:

答案 0 :(得分:0)

我从甲骨文那里得到的答案: “ CONVERT函数是一个传统函数,不应用于任何与应用程序相关的字符集转换。  CLOB尤其棘手,因为它在多字节数据库(例如AL32UTF8)中使用特殊的存储编码。 CONVERT仅对某些维修任务有用。 在数据库数据库字符集以外的字符集中处理数据的支持方式是使用RAW数据类型和来自软件包UTL_I18N的转换过程。但是,UTL_I18N不支持CLOB。因此,您必须读取32K块的CLOB,并使用UTL_I18N.STRING_TO_RAW将它们转换为WE8MSWIN1252,进行后期处理,并使用UTL_FILE.PUT_RAW写入文件。”

我还得到了另一个unix命令iconv,它可以转换文件编码,因此基本上我是将db输出写入文件,因此转换了其编码并传输了数据。

谢谢