前言
最近在写支持openGauss的dbms_lob包,其中的converttoblob及converttoclob两个过程涉及到了字符集相关内容(有个参数是nls_charset_id),但openGauss(基于postgresql)中的字符集名称和oracle的不一致,在迁移时,需要进行一些转换,因此本人做了如下整理。
PG-ORACLE字符集映射
以下是PG到Oracle字符集映射表,其中PG字符集清单来自PG官方文档 (http://postgres.cn/docs/13/multibyte.html),oracle字符集是根据oracle文档(https://docs.oracle.com/en/database/oracle/oracle-database/21/nlspg/appendix-A-locale-data.html)中的描述及查阅相关标准资料后,进行的人工匹配,如有错误,请联系本人进行修改
PG | ORACLE | NLS_CHARSET_ID | 描述 | 语言 | 是否服务器端? | ICU? | 字节/字符 | 别名 |
---|
BIG5 | ZHT16BIG5 | 865 | Big Five | 繁体中文 | 否 | 否 | 1–2 | | EUC_CN | | | 扩展UNIX编码-中国 | 简体中文 | 是 | 是 | 1–3 | | EUC_JP | JA16EUC | 830 | 扩展UNIX编码-日本 | 日文 | 是 | 是 | 1–3 | | EUC_JIS_2004 | JA16EUCTILDE | 837 | 扩展UNIX编码-日本, JIS X 0213 | 日文 | 是 | 否 | 1–3 | | EUC_KR | | | 扩展UNIX编码-韩国 | 韩文 | 是 | 是 | 1–3 | | EUC_TW | ZHT32EUC | 860 | 扩展UNIX编码-台湾 | 繁体中文,台湾话 | 是 | 是 | 1–3 | | GB18030 | ZHS32GB18030 | 854 | 国家标准 | 中文 | 否 | 否 | 1–4 | | GBK | ZHS16GBK | 852 | 扩展国家标准 | 简体中文 | 否 | 否 | 1–2 | WIN936,?Windows936 | ISO_8859_5 | CL8ISO8859P5 | 35 | ISO 8859-5,?ECMA?113 | 拉丁语/西里尔语 | 是 | 是 | 1 | | ISO_8859_6 | AR8ISO8859P6 | 36 | ISO 8859-6,?ECMA?114 | 拉丁语/阿拉伯语 | 是 | 是 | 1 | | ISO_8859_7 | EL8ISO8859P7 | 37 | ISO 8859-7,?ECMA?118 | 拉丁语/希腊语 | 是 | 是 | 1 | | ISO_8859_8 | IW8ISO8859P8 | 38 | ISO 8859-8,?ECMA?121 | 拉丁语/希伯来语 | 是 | 是 | 1 | | JOHAB | KO16KSCCS | 845 | JOHAB | 韩语 | 否 | 否 | 1–3 | | KOI8R | CL8KOI8R | 196 | KOI8-R | 西里尔语(俄语) | 是 | 是 | 1 | KOI8 | KOI8U | CL8KOI8U | 51 | KOI8-U | 西里尔语(乌克兰语) | 是 | 是 | 1 | | LATIN1 | WE8ISO8859P1 | 31 | ISO 8859-1,?ECMA?94 | 西欧 | 是 | 是 | 1 | ISO88591 | LATIN2 | EE8ISO8859P2 | 32 | ISO 8859-2,?ECMA?94 | 中欧 | 是 | 是 | 1 | ISO88592 | LATIN3 | SE8ISO8859P3 | 33 | ISO 8859-3,?ECMA?94 | 南欧 | 是 | 是 | 1 | ISO88593 | LATIN4 | NEE8ISO8859P4 | 34 | ISO 8859-4,?ECMA?94 | 北欧 | 是 | 是 | 1 | ISO88594 | LATIN5 | WE8ISO8859P9 | 39 | ISO 8859-9,?ECMA?128 | 土耳其语 | 是 | 是 | 1 | ISO88599 | LATIN6 | NE8ISO8859P10 | 40 | ISO 8859-10,?ECMA?144 | 日耳曼语 | 是 | 是 | 1 | ISO885910 | LATIN7 | BLT8ISO8859P13 | 47 | ISO 8859-13 | 波罗的海 | 是 | 是 | 1 | ISO885913 | LATIN8 | CEL8ISO8859P14 | 48 | ISO 8859-14 | 凯尔特语 | 是 | 是 | 1 | ISO885914 | LATIN9 | WE8ISO8859P15 | 46 | ISO 8859-15 | 带欧罗巴和口音的LATIN1 | 是 | 是 | 1 | ISO885915 | LATIN10 | | | ISO 8859-16,?ASRO?SR 14111 | 罗马尼亚语 | 是 | 否 | 1 | ISO885916 | MULE_INTERNAL | | | Mule内部编码 | 多语种编辑器 | 是 | 否 | 1–4 | | SJIS | JA16SJIS | 832 | Shift JIS | 日语 | 否 | 否 | 1–2 | Mskanji,?ShiftJIS,?WIN932,?Windows932 | SHIFT_JIS_2004 | JA16SJISTILDE | 838 | Shift JIS, JIS X 0213 | 日语 | 否 | 否 | 1–2 | | SQL_ASCII | US7ASCII | 1 | 未指定(见文本) | 任意 | 是 | 否 | 1 | | UHC | KO16MSWIN949 | 846 | 统一韩语编码 | 韩语 | 否 | 否 | 1–2 | WIN949,?Windows949 | UTF8 | AL32UTF8 | 873 | Unicode, 8-bit | 所有 | 是 | 是 | 1–4 | Unicode | WIN866 | RU8PC866 | 152 | Windows CP866 | 西里尔语 | 是 | 是 | 1 | ALT | WIN874 | | | Windows CP874 | 泰语 | 是 | 否 | 1 | | WIN1250 | EE8MSWIN1250 | 170 | Windows CP1250 | 中欧 | 是 | 是 | 1 | | WIN1251 | CL8MSWIN1251 | 171 | Windows CP1251 | 西里尔语 | 是 | 是 | 1 | WIN | WIN1252 | WE8MSWIN1252 | 178 | Windows CP1252 | 西欧 | 是 | 是 | 1 | | WIN1253 | EL8MSWIN1253 | 174 | Windows CP1253 | 希腊语 | 是 | 是 | 1 | | WIN1254 | TR8MSWIN1254 | 177 | Windows CP1254 | 土耳其语 | 是 | 是 | 1 | | WIN1255 | IW8MSWIN1255 | 175 | Windows CP1255 | 希伯来语 | 是 | 是 | 1 | | WIN1256 | AR8MSWIN1256 | 560 | Windows CP1256 | 阿拉伯语 | 是 | 是 | 1 | | WIN1257 | BLT8MSWIN1257 | 179 | Windows CP1257 | 波罗的海 | 是 | 是 | 1 | | WIN1258 | VN8MSWIN1258 | 45 | Windows CP1258 | 越南语 | 是 | 是 | 1 | ABC,?TCVN,?TCVN5712,?VSCII |
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 ID
FROM DUAL
CONNECT BY ROWNUM <= 5000)
where name is not null;
在oracle 21c中查询,可以得到258个字符集
NLS_CHARSET_NAME | NLS_CHARSET_ID |
---|
US7ASCII | 1 | WE8DEC | 2 | WE8HP | 3 | US8PC437 | 4 | WE8EBCDIC37 | 5 | WE8EBCDIC500 | 6 | WE8EBCDIC1140 | 7 | WE8EBCDIC285 | 8 | WE8EBCDIC1146 | 9 | WE8PC850 | 10 | D7DEC | 11 | F7DEC | 12 | S7DEC | 13 | E7DEC | 14 | SF7ASCII | 15 | NDK7DEC | 16 | I7DEC | 17 | NL7DEC | 18 | CH7DEC | 19 | YUG7ASCII | 20 | SF7DEC | 21 | TR7DEC | 22 | IW7IS960 | 23 | IN8ISCII | 25 | WE8EBCDIC1148 | 27 | WE8PC858 | 28 | WE8ISO8859P1 | 31 | EE8ISO8859P2 | 32 | SE8ISO8859P3 | 33 | NEE8ISO8859P4 | 34 | CL8ISO8859P5 | 35 | AR8ISO8859P6 | 36 | EL8ISO8859P7 | 37 | IW8ISO8859P8 | 38 | WE8ISO8859P9 | 39 | NE8ISO8859P10 | 40 | TH8TISASCII | 41 | TH8TISEBCDIC | 42 | BN8BSCII | 43 | VN8VN3 | 44 | VN8MSWIN1258 | 45 | WE8ISO8859P15 | 46 | BLT8ISO8859P13 | 47 | CEL8ISO8859P14 | 48 | CL8ISOIR111 | 49 | WE8NEXTSTEP | 50 | CL8KOI8U | 51 | AZ8ISO8859P9E | 52 | AR8ASMO708PLUS | 61 | AR8EBCDICX | 70 | AR8XBASIC | 72 | EL8DEC | 81 | TR8DEC | 82 | WE8EBCDIC37C | 90 | WE8EBCDIC500C | 91 | IW8EBCDIC424 | 92 | TR8EBCDIC1026 | 93 | WE8EBCDIC871 | 94 | WE8EBCDIC284 | 95 | WE8EBCDIC1047 | 96 | WE8EBCDIC1140C | 97 | WE8EBCDIC1145 | 98 | WE8EBCDIC1148C | 99 | WE8EBCDIC1047E | 100 | WE8EBCDIC924 | 101 | EEC8EUROASCI | 110 | EEC8EUROPA3 | 113 | LA8PASSPORT | 114 | BG8PC437S | 140 | EE8PC852 | 150 | RU8PC866 | 152 | RU8BESTA | 153 | IW8PC1507 | 154 | RU8PC855 | 155 | TR8PC857 | 156 | CL8MACCYRILLIC | 158 | CL8MACCYRILLICS | 159 | WE8PC860 | 160 | IS8PC861 | 161 | EE8MACCES | 162 | EE8MACCROATIANS | 163 | TR8MACTURKISHS | 164 | IS8MACICELANDICS | 165 | EL8MACGREEKS | 166 | IW8MACHEBREWS | 167 | EE8MSWIN1250 | 170 | CL8MSWIN1251 | 171 | ET8MSWIN923 | 172 | BG8MSWIN | 173 | EL8MSWIN1253 | 174 | IW8MSWIN1255 | 175 | LT8MSWIN921 | 176 | TR8MSWIN1254 | 177 | WE8MSWIN1252 | 178 | BLT8MSWIN1257 | 179 | D8EBCDIC273 | 180 | I8EBCDIC280 | 181 | DK8EBCDIC277 | 182 | S8EBCDIC278 | 183 | EE8EBCDIC870 | 184 | CL8EBCDIC1025 | 185 | F8EBCDIC297 | 186 | IW8EBCDIC1086 | 187 | CL8EBCDIC1025X | 188 | D8EBCDIC1141 | 189 | N8PC865 | 190 | BLT8CP921 | 191 | LV8PC1117 | 192 | LV8PC8LR | 193 | BLT8EBCDIC1112 | 194 | LV8RST104090 | 195 | CL8KOI8R | 196 | BLT8PC775 | 197 | DK8EBCDIC1142 | 198 | S8EBCDIC1143 | 199 | I8EBCDIC1144 | 200 | F7SIEMENS9780X | 201 | E7SIEMENS9780X | 202 | S7SIEMENS9780X | 203 | DK7SIEMENS9780X | 204 | N7SIEMENS9780X | 205 | I7SIEMENS9780X | 206 | D7SIEMENS9780X | 207 | F8EBCDIC1147 | 208 | WE8GCOS7 | 210 | EL8GCOS7 | 211 | US8BS2000 | 221 | D8BS2000 | 222 | F8BS2000 | 223 | E8BS2000 | 224 | DK8BS2000 | 225 | S8BS2000 | 226 | WE8BS2000E | 230 | WE8BS2000 | 231 | EE8BS2000 | 232 | CE8BS2000 | 233 | CL8BS2000 | 235 | WE8BS2000L5 | 239 | WE8DG | 241 | WE8NCR4970 | 251 | WE8ROMAN8 | 261 | EE8MACCE | 262 | EE8MACCROATIAN | 263 | TR8MACTURKISH | 264 | IS8MACICELANDIC | 265 | EL8MACGREEK | 266 | IW8MACHEBREW | 267 | US8ICL | 277 | WE8ICL | 278 | WE8ISOICLUK | 279 | EE8EBCDIC870C | 301 | EL8EBCDIC875S | 311 | TR8EBCDIC1026S | 312 | BLT8EBCDIC1112S | 314 | IW8EBCDIC424S | 315 | EE8EBCDIC870S | 316 | CL8EBCDIC1025S | 317 | TH8TISEBCDICS | 319 | AR8EBCDIC420S | 320 | CL8EBCDIC1025C | 322 | CL8EBCDIC1025R | 323 | EL8EBCDIC875R | 324 | CL8EBCDIC1158 | 325 | CL8EBCDIC1158R | 326 | EL8EBCDIC423R | 327 | WE8MACROMAN8 | 351 | WE8MACROMAN8S | 352 | TH8MACTHAI | 353 | TH8MACTHAIS | 354 | HU8CWI2 | 368 | EL8PC437S | 380 | EL8EBCDIC875 | 381 | EL8PC737 | 382 | LT8PC772 | 383 | LT8PC774 | 384 | EL8PC869 | 385 | EL8PC851 | 386 | CDN8PC863 | 390 | HU8ABMOD | 401 | AR8ASMO8X | 500 | AR8NAFITHA711T | 504 | AR8SAKHR707T | 505 | AR8MUSSAD768T | 506 | AR8ADOS710T | 507 | AR8ADOS720T | 508 | AR8APTEC715T | 509 | AR8NAFITHA721T | 511 | AR8HPARABIC8T | 514 | AR8NAFITHA711 | 554 | AR8SAKHR707 | 555 | AR8MUSSAD768 | 556 | AR8ADOS710 | 557 | AR8ADOS720 | 558 | AR8APTEC715 | 559 | AR8MSWIN1256 | 560 | AR8NAFITHA721 | 561 | AR8SAKHR706 | 563 | AR8ARABICMAC | 565 | AR8ARABICMACS | 566 | AR8ARABICMACT | 567 | LA8ISO6937 | 590 | WE8DECTST | 798 | JA16VMS | 829 | JA16EUC | 830 | JA16EUCYEN | 831 | JA16SJIS | 832 | JA16DBCS | 833 | JA16SJISYEN | 834 | JA16EBCDIC930 | 835 | JA16MACSJIS | 836 | JA16EUCTILDE | 837 | JA16SJISTILDE | 838 | KO16KSC5601 | 840 | KO16DBCS | 842 | KO16KSCCS | 845 | KO16MSWIN949 | 846 | ZHS16CGB231280 | 850 | ZHS16MACCGB231280 | 851 | ZHS16GBK | 852 | ZHS16DBCS | 853 | ZHS32GB18030 | 854 | ZHT32EUC | 860 | ZHT32SOPS | 861 | ZHT16DBT | 862 | ZHT32TRIS | 863 | ZHT16DBCS | 864 | ZHT16BIG5 | 865 | ZHT16CCDC | 866 | ZHT16MSWIN950 | 867 | ZHT16HKSCS | 868 | AL24UTFFSS | 870 | UTF8 | 871 | UTFE | 872 | AL32UTF8 | 873 | ZHT16HKSCS31 | 992 | ZHT32EUCTST | 993 | WE16DECTST2 | 994 | WE16DECTST | 995 | KO16TSTSET | 996 | JA16TSTSET2 | 997 | JA16TSTSET | 998 | UTF16 | 1000 | US16TSTFIXED | 1001 | TIMESTEN8 | 1002 | JA16EUCFIXED | 1830 | JA16SJISFIXED | 1832 | JA16DBCSFIXED | 1833 | KO16KSC5601FIXED | 1840 | KO16DBCSFIXED | 1842 | ZHS16CGB231280FIXED | 1850 | ZHS16GBKFIXED | 1852 | ZHS16DBCSFIXED | 1853 | ZHT32EUCFIXED | 1860 | ZHT32TRISFIXED | 1863 | ZHT16DBCSFIXED | 1864 | ZHT16BIG5FIXED | 1865 | AL16UTF16 | 2000 | AL16UTF16LE | 2002 |
目前compat-tools中已经加入了dbms_lob包,但常用的还差converttoblob、converttoclob以及文件相关操作,近期会先把这两个类型转换的补上去 https://gitee.com/enmotech/compat-tools
另外,nls_charset_name及nls_charset_id这两个函数的兼容版近期也会提交到compat-tools中去,在提交之前也可先试用尝鲜版 https://gitee.com/darkathena/opengauss-oracle/blob/main/oracle-function/nls_charset_name.sql https://gitee.com/darkathena/opengauss-oracle/blob/main/oracle-function/nls_charset_id.sql
|