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