oracle的clob存中文乱码,oracle - 如何在Oracle查询中将CLOB转换为UTF8? - 堆栈内存溢出...

使用DBMS_LOB.CONVERTTOBLOB。

从oracle文档:

Oracle不鼓励在当前的Oracle数据库版本中使用CONVERT函数。 CONVERT的返回值具有字符数据类型,因此它应该在数据库字符集中或国家字符集中,具体取决于数据类型。 不支持任何不是这两个字符集之一的dest_char_set。 ...

如果在字符集中需要像CLOB这样的字符数据类型,而不是数据库的设置,则应将其转换为BLOB。 这是DBMS_LOB.CONVERTTOBLOB的用武之地。

如果需要一个返回BLOB的函数,则必须将CONVERTTOBLOB包装到您自己的函数中。 例如:

CREATE OR REPLACE FUNCTION clob_to_blob (p_clob CLOB, p_charsetname VARCHAR2)

RETURN BLOB

AS

l_lang_ctx INTEGER := DBMS_LOB.default_lang_ctx;

l_warning INTEGER;

l_dest_offset NUMBER := 1;

l_src_offset NUMBER := 1;

l_return BLOB;

BEGIN

DBMS_LOB.createtemporary (l_return, FALSE);

DBMS_LOB.converttoblob (

l_return,

p_clob,

DBMS_LOB.lobmaxsize,

l_dest_offset,

l_src_offset,

CASE WHEN p_charsetname IS NOT NULL THEN NLS_CHARSET_ID (p_charsetname) ELSE DBMS_LOB.default_csid END,

l_lang_ctx,

l_warning);

RETURN l_return;

END;

这允许查询如下:

SELECT clob_to_blob (field, 'UTF8') FROM t;

要获取字符集名称支持的值列表,请使用:

SELECT *

FROM v$nls_valid_values

WHERE parameter = 'CHARACTERSET'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值