1. 程式人生 > >sqlplus 中文亂碼 字符集設定

sqlplus 中文亂碼 字符集設定

1)查詢資料庫字符集
       select * from nls_database_parameters
    其中 nls_language表示了顯示方式, 就是sqlplus的程式的顯示字型,有SIMPLIFIED CHINESE,American america
   其中  nls_characterset是字符集設定, 常用的一些字符集有UTF8,US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK, AL32UTF8
   2)修改資料庫字符集
       當發現數據庫字符集不正確時,如我們期望時GBK的,而資料庫當前是其他的,從而引起中文亂碼。這時我們需要修改資料庫字符集。步驟如下:

     $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

2 客戶端字符集
     
 如果伺服器端的字符集是正確的,而在客戶端下,如sqlplus仍然不能正確顯示中文,這一般是由於伺服器端的字符集設定與客戶端的字符集設定不同造成的。只要將兩者修改一致就可以解決問題。
    1)查詢客戶端字符集
    select * from nls_instance_parameters
    客戶端字符集環境select * from nls_instance_parameters,其來源於v$parameter,

    表示客戶端的字符集的設定,可能是引數檔案,環境變數或者是登錄檔
        select userenv('language') from dual;
    會話字符集環境 select * from nls_session_parameters,其來源於v$nls_parameters,表示會話自己的設定,可能是會話的環境變數或者是alter session完成,如果會話沒有特殊的設定,將與nls_instance_parameters一致。 
    客戶端的字符集要求與伺服器一致,才能正確顯示資料庫的非Ascii字元。如果多個設定存在的時候,alter session>環境變數>登錄檔>引數檔案
    字符集要求一致,但是語言設定卻可以不同,語言設定建議用英文。如字符集是zhs16gbk,則nls_lang可以是American_America.zhs16gbk。  或者.zhs16gbk。注意zhs16gbk前面那個點是必須的哦!!