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