sqlplus操作--文件的輸入與輸出


再sqlplus中執行腳本sql語句,並使結果輸出到ouput文件
--關閉console台輸出,可以節省時間
set term off;
--再輸出的文件中顯示執行的sql語句
set echo on;
--顯示執行每條語句所用的時間
set timing on;
--每行顯示的100個字符
set linesize 100;
--查詢結果每一百條分一頁
set pagesize 100;
--spool 設置輸出文件
spool d:\tempfile\oracle\output.txt;
--執行input.txt里面的sql語句
@ d:\tempfile\oracle\input.txt;
--把內容從緩存里面輸出到文件吧
spool off;

執行此操作遇到問題
在output.txt中出現亂碼
    1.當把output.txt文件設置為gbk字符編碼時,發現input.txt里面的中文亂碼
    2.當把output.txt文件設置為utf-8字符編碼時,describe emp;輸出語句里面的中文亂碼
最后把input.txt(原本是utf-8)文件字符編碼設置為gbk;



這里主要出現的問題是sqlplus客戶端字符編碼是gbk,輸出的內容為gbk編碼,如果把output.txt設置為utf-8則sqlplus客戶端穿過來的內容亂碼;
因為服務端和客戶端都是gbk編碼,所以input.txt的所有內容並不會出現字符集轉換,所以這里選擇把input.txt字符集換成和sqlplus客戶端字符集相同,並把output.txt設置為與sqlplus客戶端相同,就解決了亂碼。



原因可見oracle字符編碼的解決


一、查詢服務端字符集
    select userenv('language') from dual; 

    USERENV('LANGUAGE')
    ----------------------------------------------------
    SIMPLIFIED CHINESE_CHINA.ZHS16GBK


二、 客戶端NLS_LANG參數(即sqlplus的參數)該參數用於向Oracle指示客戶端操作系統(sqlplus客戶端)的字符集。
    select * from v$nls_parameters where parameter='NLS_CHARACTERSET';  

    PARAMETER                      VALUE
    ------------------------------ ------------------------------
    NLS_CHARACTERSET               ZHS16GBK


    設置客戶端NLS_LANG 
    C:\Users\85243>set nls_lang=Simplified Chinese_China.ZHS16GBK
    C:\Users\85243>set nls_lang=Simplified Chinese_China.AL32UTF8

三、客戶端操作系統字符集
    C:\Users\85243>chcp
    活動代碼頁: 936
    936代表的是gbk編碼 65001代表的是utf-8

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM