Oracle字符集问题总结

(1):NLS=National Language Support 国家语言支持
(2):它有三个组成部分(语言、地域和字符集),
(3)字符集 一是oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。
    a: server端的字符集
     SQL> select userenv('language') from dual;

     USERENV('LANGUAGE')
    ----------------------------------------------------
     SIMPLIFIED CHINESE_CHINA.ZHS16GBK
    b:client
  方式一更改:
C:\Documents and Settings\Administrator>set nls_lang=SIMPLIFIED CHINESE_CHINA.ZH
S16GBK
方式二更改:

>echo %nls_lang%  这个方式用dos看在window系统下
    window regedit /NLS_LANG的键值
  
SIMPLIFIED CHINESE_CHINA.ZHS16GBK 


------以下尚未验证!
    c:
dmp文件的字符集
用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:

  SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;

  ZHS16GBK

  如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):

  cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6

  然后用上述SQL也可以得到它对应的字符集。

(4):我们最常用的两种字符集ZHS16GBK和ZHS16CGB231280之间不存在子集和超集关系
(5):
1、修改server端字符集(不建议使用)

  在oracle 8之前,可以用直接修改数据字典表props$来改变数据库的字符集。但oracle8之后,至少有三张系统表记录了数据库字符集的信息,只改props$表并不完全,可能引起严重的后果。正确的修改方法如下:

  $sqlplus /nolog

  SQL>conn / 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 ZHS16GBK;

  SQL>SHUTDOWN IMMEDIATE;

  SQL>STARTUP

你可能感兴趣的:(oracle,sql,C++,c,SQL Server)