今天导入oracle dmp文件时,出现报错,具体错误为某张表的某个字段超出实际长度(实际值:62,最大值50),此字段类型为varchar2(50),百思不得其解,后得经理指点得知,是字符集的原因,安装数据库是默认为GBK,然而一般使用都是UTF-8,导入的文件中也是用的UTF-8字符集,所以需要修改字符集。
命令如下:
sqlplus
请输入用户名: sys as sysdba 输入口令:
select userenv('language') from dual; //查看字符集
shutdown immediate;
startup mount;
alter system enable restricted session;
alter system set job_queue_processes=0;
alter system set aq_tm_processes=0;
alter database open;
alter database character set internal_use utf8;//改为utf-8
// alter database character set internal_use zhs16gbk; 改为gbk
shutdown immediate;
startup;
运行过程如下:
C:\Users\Administrator>sqlplus
SQL*Plus: Release 11.2.0.1.0 Production on 星期四 9月 14 00:09:08 2017
Copyright (c) 1982, 2010, Oracle. All rights reserved.
请输入用户名: sys as sysdba
输入口令:
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Prod
With the Partitioning, OLAP, Data Mining and Real Application Testing
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 4242378752 bytes
Fixed Size 2182504 bytes
Variable Size 2264924824 bytes
Database Buffers 1962934272 bytes
Redo Buffers 12337152 bytes
数据库装载完毕。
SQL> alter system enable restricted session;
系统已更改。
SQL> alter system set job_queue_processes=0;
系统已更改。
SQL> alter system set aq_tm_processes=0;
系统已更改。
SQL> alter database open;
数据库已更改。
SQL> alter database character set utf8;
alter database character set utf8
*
第 1 行出现错误:
ORA-12712: 新字符集必须为旧字符集的超集
SQL> alter database character set internal_use utf8;
数据库已更改。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup;
ORACLE 例程已经启动。
Total System Global Area 4242378752 bytes
Fixed Size 2182504 bytes
Variable Size 2264924824 bytes
Database Buffers 1962934272 bytes
Redo Buffers 12337152 bytes
数据库装载完毕。
数据库已经打开。
SQL>