前言
最近在写支持openGauss的dbms_lob包,其中的converttoblob及converttoclob两个过程涉及到了字符集相关内容(有个参数是nls_charset_id),但openGauss(基于postgresql)中的字符集名称和oracle的不一致,在迁移时,需要进行一些转换,因此本人做了如下整理。
PG-ORACLE字符集映射
以下是PG到Oracle字符集映射表,其中PG字符集清单来自PG官方文档
(/docs/13/multibyte.html),oracle字符集是根据oracle文档(/en/database/oracle/oracle-database/21/nlspg/appendix-A-locale-data.html)中的描述及查阅相关标准资料后,进行的人工匹配,如有错误,请联系本人进行修改
nls_charset_name-nls_charset_id
oracle官方文档未给出nls_charset_name及nls_charset_id的匹配关系,但提供了两个函数
nls_charset_name和nls_charset_id,可以指定一个字符集id查询字符集名称,或者指定一个字符集名称查询字符集id。经确认,目前字符集id最大才到2002,因此可以通过以下sql查询完整的对应关系
select *from (SELECT NLS_CHARSET_NAME(ROWNUM) NAME, ROWNUM IDFROM DUALCONNECT BY ROWNUM <= 5000)where name is not null;
在oracle 21c中查询,可以得到258个字符集
目前compat-tools中已经加入了dbms_lob包,但常用的还差converttoblob、converttoclob以及文件相关操作,近期会先把这两个类型转换的补上去
/enmotech/compat-tools
另外,nls_charset_name及nls_charset_id这两个函数的兼容版近期也会提交到compat-tools中去,在提交之前也可先试用尝鲜版
/darkathena/opengauss-oracle/blob/main/oracle-function/nls_charset_name.sql
/darkathena/opengauss-oracle/blob/main/oracle-function/nls_charset_id.sql
本文作者:DarkAthena本文链接:https://www.darkathena.top/archives/oracle-postgresql-charset-matching版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!