最近作项目,由于开发人员的疏忽,在创建oracle9i数据库时没有选择字符集,使用过程中,通过sql语句在该数据库中的表空间执行插入操作时,会报错。经排查,是由字符集问题引起,现在将解决方法提供如下:
在linux下若安装oracle没有选择ZHS16GBK,则在处理汉字时会有乱码情况出现。解决方法:
 命令行模式下执行sqlplus "/as sysdba",以sysdba身份进入sqlplus,先执行sql语句:select * from sys.props$,查看NLS_CHARACTER的值,若不是"ZHS16GBK",则可运行sql语句:update sys.props$ set value$='ZHS16GBK' where name='NLS_CHARACTERSET'
 
执行完毕后,停止数据库(sqlplus中使用sysdba登陆,执行shutdown命令),然后启动数据库,启动实例(startup),插入汉字成功。
 
经测试,该种方式由于修改了字符集的系统设置,毕竟是不妥当的(我们后来发现备份表空间失败问题,疑似由此引起),最好的办法还是重新创建数据库,创建时选择字符集为“ZHS16GBK”
  
 http://blog.csdn.net/merryzhao/

解决方案 »

  1.   

    我看你還是新建個數據庫  把新數據庫設置對字符級別  然後進行數據庫倒!!新數據庫不如UTF8
      

  2.   

    我更改字符集不是通过这个sys.props$更改的
    我的更改方法如下,lz可以试试我的方法是否有效:
    Startup nomount;
    Alter database mount exclusive;
    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 ZHS16CGB231280;
      

  3.   

    update sys.props$ set value$='ZHS16GBK' where name='NLS_CHARACTERSET'这种方式更改数据库字符集很危险.