在使用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 行。
到这里我们的字符集就更改过来了