oracle 字符集修改 AL32UTF8 改为 ZHS16GBK

2022-10-09,,,

在使用oracle的过程中,会出现各种各样的问题,各种各样的错误,其中ora-12899就是前段时间我在将数据导入到我本地机器上的时候一直出现的问题.不过还好已经解决了这个问题,现在分享一下,解决方案;
出现ora-12899,是字符集引起的,中文在utf-8中占3个字节,zhs16gbk中占2个字节,而源dmp文件字符集是zhs16gbk库里倒出来的数据,现在要导入到目标字符集为utf-8的库里,所以会出现ora-12899
其实只要修改一下oracle 的字符集就可以很好的解决这个问题;

microsoft windows [版本 10.0.18362.10024]
(c) 2019 microsoft corporation。保留所有权利。

c:\users\asus>sqlplus /nolog

sql*plus: release 18.0.0.0.0 - production on 星期四 3月 12 14:34:38 2020
version 18.4.0.0.0

copyright (c) 1982, 2018, oracle.  all rights reserved.

sql> conn / as sysdba
已连接。
sql> select userenv('language') from dual;
 
userenv('language')
--------------------------------------------------------------------------------
 
simplified chinese_china.al32utf8
 
sql> shutdown immediate
数据库已经关闭。
已经卸载数据库。
oracle 例程已经关闭。
sql> startup mount exclusive;
oracle 例程已经启动。
 
total system global area 2533359616 bytes
fixed size                  3835256 bytes
variable size             738200200 bytes
database buffers         1778384896 bytes
redo buffers               12939264 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 internal_use zhs16gbk;
 
数据库已更改。
 
sql> alter database national character set internal_use al16utf16;
 
数据库已更改。
 
sql> shutdown immediate
数据库已经关闭。
已经卸载数据库。
oracle 例程已经关闭。
sql> startup
oracle 例程已经启动。
 
total system global area 2533359616 bytes
fixed size                  3835256 bytes
variable size             738200200 bytes
database buffers         1778384896 bytes
redo buffers               12939264 bytes
数据库装载完毕。
数据库已经打开。
sql> select userenv('language') from dual;
 
userenv('language')
----------------------------------------------------
simplified chinese_china.zhs16gbk
 
sql> col parameter format a32;
sql> col value format a32;
sql> select * from nls_database_parameters;
 
parameter                        value
-------------------------------- --------------------------------
nls_rdbms_version                12.1.0.2.0
nls_nchar_conv_excp              false
nls_length_semantics             byte
nls_comp                         binary
nls_dual_currency                $
nls_timestamp_tz_format          dd-mon-rr hh.mi.ssxff am tzr
nls_time_tz_format               hh.mi.ssxff am tzr
nls_timestamp_format             dd-mon-rr hh.mi.ssxff am
nls_time_format                  hh.mi.ssxff am
nls_sort                         binary
nls_date_language                american
 
parameter                        value
-------------------------------- --------------------------------
nls_date_format                  dd-mon-rr
nls_calendar                     gregorian
nls_numeric_characters           .,
nls_nchar_characterset           al16utf16
nls_characterset                 zhs16gbk
nls_iso_currency                 america
nls_currency                     $
nls_territory                    america
nls_language                     american
 
已选择 20 行。
 

 

 到这里我们的字符集就更改过来了

 

《oracle 字符集修改 AL32UTF8 改为 ZHS16GBK.doc》

下载本文的Word格式文档,以方便收藏与打印。