不同字符集导致的Oracle导入问题

ber*_*d_k 11 oracle import

我正在尝试将 Oracle 11 导出导入 Oracle 11 XE。

我收到以下消息:

在 WE8MSWIN1252 字符集和 AL16UTF16 NCHAR 字符集中完成的 XE fehlerhaft 导入
导入服务器使用 AL32UTF8 字符集(可能的字符集转换)

任何想法,我如何将此转储导入 Oracle 11 XE ?

编辑:

给定一张桌子

CREATE TABLE BDATA.Artikel(
    Key                   VARCHAR2(3)  NOT NULL,
    Name                  VARCHAR2(60) NOT NULL,
    Abkuerzung            VARCHAR2(5)  NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

我收到这样的错误

IMP-00019: row rejected due to ORACLE error 12899
IMP-00003: ORACLE error 12899 encountered
ORA-12899: value too large for column "BDATA"."ARTIKEL"."ABKUERZUNG" (actual: 6, maximum: 5)
Column 1 ABL
Column 2 Aufbewahrungslösung
Column 3 AfbLö
Run Code Online (Sandbox Code Playgroud)

导入中缺少某些行。

Jus*_*ave 8

如果这是您用来创建表的实际 DDL,您可以使用NLS_LENGTH_SEMANTICS参数。如果将其设置为 CHAR 而不是 BYTE 的默认值,则 VARCHAR2(5) 将被分配足够的空间来存储数据库字符集中的 5 个字符(可能最多 20 个字节)而不是 5 个字节(可能只允许 1 个字符) )。

不幸的是,NLS_LENGTH_SEMANTICS如果您依赖导入过程来创建表,那么更改可能不会非常有用——转储文件将固有地添加 CHAR 或 BYTE 关键字,因此它实际上会发出语句

CREATE TABLE BDATA.Artikel(
    Key                   VARCHAR2(3 BYTE)  NOT NULL,
    Name                  VARCHAR2(60 BYTE) NOT NULL,
    Abkuerzung            VARCHAR2(5 BYTE)  NOT NULL
);
Run Code Online (Sandbox Code Playgroud)