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