如何更改Oracle 10gr2 express Edition的默认字符集

Cai*_*der 0 oracle10g ora-12899

我在笔记本电脑上安装了oracle 10gr2 express版.当我导入由oracle 10gr2企业版生成的.dmp文件时,会发生错误.

生成.dmp文件的数据库服务器正在运行 GBK字符集,但我的oracle express服务器正在运行UTF-8.

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
--------------------------------------------------------------------------------
SIMPLIFIED CHINESE_CHINA.AL32UTF8
Run Code Online (Sandbox Code Playgroud)

如何配置我自己的oracle服务器来导入.dmp文件?

编辑------------------------------------------------- - 我自己的oracle express服务器:

SQL> select * from v$nls_parameters where parameter like '%CHARACTERSET';

PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_CHARACTERSET
AL32UTF8

NLS_NCHAR_CHARACTERSET
AL16UTF16
Run Code Online (Sandbox Code Playgroud)

Cod*_*odo 5

新字符集每个字符最多需要4个字节,而旧字符集最多只需要2个字节.因此,由于字符集更改,某些字符字段将比以前需要更多空间.显然,他们中的一些人现在已经达到了列长限制.

要解决此问题,您必须增加受影响列的长度或更改长度语义,以便以字符(而不是字节,这是默认值)解释长度.

如果转储文件包含模式定义和数据,则必须分阶段进行:首先导入模式,增加列长度,最后导入数据.

我没有长度语义的经验.我通常明确指出它.有关信息,请参阅有关NLS_LENGTH_SEMANTICS参数的文档.它会影响100以下语句中的数字的解释方式:

CREATE TABLE example (
    id NUMBER,
    name VARCHAR(100)
);
Run Code Online (Sandbox Code Playgroud)

通常,最好是明确并直接指定单位:

CREATE TABLE example (
    id NUMBER,
    name VARCHAR(100 CHAR)
);
Run Code Online (Sandbox Code Playgroud)