linux redhat 4 安装了oracle9.2.0.4 数据库表信息为乱码 在.bash_profile中设置的是
    export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859p1后来找了一个方法进行一下操作:
    1> 修改 数据库字符集 INTERNAL_USE
[oracle@localhost ~]$ sqlplus / as sysdba
(若此时数据库服务器已启动,则先执行 SHUTDOWN IMMEDIATE 命令关闭数据库服务器)
SQL>STARTUP MOUNT;
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 ZHS16GBK;
SQL>ALTER DATABASE national CHARACTER SET INTERNAL_USE UTF8;
(提示:INTERNAL_USE 可以绕过超集的约束检查)
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP补充:
a>超集约束检查
SQL>alter database character set zhs16gbk
ERROR at line 1:
ORA-12712: new character set must be a superset of old character setb>查询数据库字符集(dba)
SQL>select * from nls_database_parameters;
参数[nls_language]表示了显示方式, 
    就是sqlplus的程序的显示字体,有 SIMPLIFIED CHINESE,American america
参数[nls_characterset]是字符集设定, 
    常用的一些字符集有 UTF8,US7ASCII,WE8ISO8859P1,
                    ZHS16CGB231280,ZHS16GBK,AL32UTF82> 修改 客户端字符集 (sqlplus的字符集)
用户的环境变量中增加[NLS_LANG]
针对oracle账户:
[oracle@localhost ~]$ vi .bash_profile
添加如下变量:
NLS_LANG=AMERICAN_AMERICA.UTF8
export NLS_LANG补充:
查看客户端字符集(dba)
SQL>select * from nls_instance_parameters;3> 重新登录oracle账户,并重启lsnrctl/instance
.但是还是乱码 请问各位有什么高招,都传授一下 感谢     

解决方案 »

  1.   

    1.ALTER DATABASE national CHARACTER SET INTERNAL_USE UTF8;
    中的UTF8修改为AMERICAN_AMERICA.UTF8?

    或者
    2.NLS_LANG=AMERICAN_AMERICA.UTF8
    中的AMERICAN_AMERICA.UTF8修改为UTF8?

      

  2.   

    数据库语言(select * from database_properties)、客户端语言(环境变量NLS_LANG)和终端显示语言(环境变量LANG)设定的字符集必须兼容才能看到你需要的效果。