加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

如何在Oracle中转换列的字符集

发布时间:2021-03-19 06:50:31 所属栏目:站长百科 来源:网络整理
导读:我有一个表,我们的服务提供商插入UNICODE数据,但我的oracle characterset是WE8ISO8859P1. 现在我得到的数据我使用oracle的功能,但它显示??????? 从client_campaigns中选择CONVERT(消息,’AL32UTF8′,’WE8ISO8859P1′) 更多消息库存是CLOB类型. 由于dataloss

我有一个表,我们的服务提供商插入UNICODE数据,但我的oracle characterset是WE8ISO8859P1.

现在我得到的数据我使用oracle的功能,但它显示???????

从client_campaigns中选择CONVERT(消息,’AL32UTF8′,’WE8ISO8859P1′)

更多消息库存是CLOB类型.

由于dataloss,我无法更改数据库的字符集,其次是生产和字符集的更改可能会导致错误.

现在请指导我如何将这些数据作为UNICODE获取?

问候,
伊姆兰

解决方法

插入字符(VARCHAR2或CHAR或CLOB)列的字符串将始终转换为数据库字符集.这意味着在您的情况下插入的数据将转换为WE8ISO8859P1.由于UNICODE不是WE8ISO8859P1的子集,因此您将丢失信息.您的字符集中不可用的某些字符会转换为?插入时

你该怎么办?新数据有两种选择:

>将列的数据类型修改为NVARCHAR2而不是VARCHAR2(或NCLOB而不是CLOB). NVARCHAR2是专门设计的,因此您可以处理多字节字符而无需修改主db字符集.有关VARCHAR2和NVARCHAR2之间的差异,请参阅this SO question.还要注意一些应用may not work correctly with NVARCHAR2.
>您可以将列修改为RAW或BLOB,并将您的字符串直接写为二进制流.当你再次阅读它时,它仍然是UNICODE数据.但是,数据库很难对此列数据执行任何操作:排序将是二进制的,搜索将会出现问题,因为您将无法正确使用LIKE运算符.
>如果您有大量UNICODE输入,可以考虑修改数据库字符集.这将是最昂贵的选项(您可能需要导出/重新安装/导入),但之后所有列都将具有正确的数据类型.

如果给出选择,我会选择(1)或(3).使用RAW会禁用许多功能并增加复杂性.

显然,只有数据库可用的数据才能恢复先前的数据:您必须在新结构中重新导入旧数据.

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!