我用的是XP系统,ORACLE817 ,NLS_CHARACTERSET为ZHS16GBK,我在SQLPLUS下编译一个过程时,报如下错误:
ERROR:
ORA-06550: line 1, column 29:
PLS-00553: character set name is not recognized
ORA-06550: line 0, column 0:
PL/SQL: Compilation unit analysis terminated
这个错误是说字符集设置不一致在网上找了一些方法说要把字符集设置成US7ASCII,但是我试了都不行SQL> update props$ set value$ = 'US7ASCII' where name = 'nls_characterset';
ERROR:
ORA-06550: line 1, column 29:
PLS-00553: character set name is not recognized
ORA-06550: line 0, column 0:
PL/SQL: Compilation unit analysis terminated
SQL> alter database character set US7ASCII;
alter database character set US7ASCII
                                    *
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set现在不知道该怎么做,不想重建数据库,请大家帮帮忙,谢谢!

解决方案 »

  1.   

    试试:
    ALTER DATABASE CHARACTER SET UTF8; --UTF8是US7ASCII的超集
    或者
    ALTER DATABASE CHARACTER SET ZHS16GBK;
      

  2.   

    我的默认字符集是ZHS16GBK,我现在想设置成US7ASCII,网上说貌似US7ASCII才能编译过去
    但是US7ASCII好像是ZHS16GBK的子集
    另外,不知道除了US7ASCII还可以设置成什么字符集才可以编译过去
      

  3.   

    问题解决了,在系统注册表中把NLS_LANG的值修改成AMERICAN_AMERICA.ZHS16GBK,同数据库字符集保持一致就行了。但是又把我搞糊涂了,具体如下:
    查看服务器端的字符集:
    SQL> select userenv('language') from dual;
    SIMPLIFIED CHINESE_CHINA.ZHS16GBK
    上面的语言是CHINESE,地域是CHINASQL> select parameter, value from nls_database_parameters;
    NLS_LANGUAGE  AMERICAN
    NLS_TERRIRORY  AMERICA
    上面查出来的语言是AMERICAN,地域是AMERICA, 都是服务器端的设置,为什么会不一样呢??到底哪里影响服务器语言的设置?在注册表中查看客户端的字符集设置:NLS_LANG =AMERICAN_AMERICA.ZHS16GBK 。我的客户端和服务器在同一台电脑上,我试着修改注册表里NLS_LANG的值,发现注册表里这个值跟服务器数据库里没关系,请问这个值到底是设置的什么?