前言
最近在写支持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
|